@longhongguo/form-create-ant-design-vue 3.2.42 → 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.
@@ -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 timer = null\n return function (...args) {\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n fn.apply(this, args)\n }, delay)\n }\n },\n // 防抖,在指定时间间隔内,如果多次触发,只执行最后一次\n debounce(fn, delay) {\n let timer = null\n return function (...args) {\n if (timer) clearTimeout(timer)\n timer = setTimeout(() => {\n fn.apply(this, args)\n }, delay)\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","timer","clearTimeout","setTimeout","debounce","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":";;;;;;q5CAceA,EAAA,CACXC,KAAM,0BCdF,MAAAC,EAAA,CAAAC,MAAM,0CAAZ,OAAAC,EAAAC,YAAAC,EAAAA,mBASM,OATNJ,EASM,IAAAK,EAAA,KAAAA,EAAA,GAAA,CARJC,EAAAA,mBAOK,MAAA,CAPAC,OAAO,MAAMC,MAAM,MAAMC,MAAM,6BAA6BC,QAAQ,kBACvEJ,EAE8BK,mBAAA,OAAA,CAD1BC,EAAE,iLACFC,KAAK,iBACTP,EAE8BK,mBAAA,OAAA,CAD1BC,EAAE,0aACFC,KAAK,2BCFA,IAAAC,EAAA,CAACC,EAAM,QAAEC,EAAK,QAAEC,UAAOC,EAAAA,QAASC,GCJhCC,EAAA,CACXrB,KAAM,WACNsB,WAAY,QACZC,UAAUC,GACN,MAAMC,EAAQD,EAAIE,KAAKD,MAClBE,EAAWA,YAACF,EAAO,aACpBA,EAAMG,QAAUJ,EAAIE,KAAKE,SAAW,MCNjCC,EAAA,IACRR,EAAUrB,KAAM,SCAR8B,EAAA,IACVT,EACHrB,KAAM,SACNuB,UAAUC,GACR,MAAMC,EAAQD,EAAIE,KAAKD,MAClBE,EAAWA,YAACF,EAAO,aAAYA,EAAMG,QAAUJ,EAAIE,KAAKE,SAAW,IAGxE,MAAMG,EAAYP,EAAIQ,WAAW,SACfD,IAAmC,IAAtBA,EAAUE,UAIvCR,EAAMS,UAAW,EACjBT,EAAMQ,SAAU,IAGpBE,OAAOC,EAAUZ,GAEf,MAAMO,EAAYP,EAAIQ,WAAW,SAIjC,GAHkBD,IAAmC,IAAtBA,EAAUE,SAGxBG,EAASH,QAAS,CAEjC,MAAMI,EAAc,IAAKD,GAEzB,OADAC,EAAYC,gBAAkBF,EAASH,QAChCT,EAAIe,QAAQC,cAAchB,EAAKa,GAIxC,OAAOb,EAAIe,QAAQC,cAAchB,EAAKY,KChC3BK,EAAA,CACbzC,KAAM,WACNuB,UAAUC,GACR,MAAMC,EAAQD,EAAIE,KAAKD,MAClBE,EAAWA,YAACF,EAAO,aAAYA,EAAMG,QAAUJ,EAAIE,KAAKE,SAAW,IAGxE,MAAMG,EAAYP,EAAIQ,WAAW,SACfD,IAAmC,IAAtBA,EAAUE,UAIvCR,EAAMS,UAAW,EACjBT,EAAMQ,SAAU,IAGpBE,OAAOC,EAAUZ,GAEf,MAAMO,EAAYP,EAAIQ,WAAW,SAIjC,GAHkBD,IAAmC,IAAtBA,EAAUE,SAGxBG,EAASH,QAAS,CAEjC,MAAMI,EAAc,IAAKD,GAEzB,OADAC,EAAYC,gBAAkBF,EAASH,QAChCT,EAAIe,QAAQC,cAAchB,EAAKa,GAIxC,OAAOb,EAAIe,QAAQC,cAAchB,EAAKY,KC9B1C,MAAMM,EAAc,CAClBC,KAAM,aACNC,MAAO,UACPC,KAAM,UACNC,QAAS,UACTC,KAAM,QAGF/C,EAAO,aAEE,IAAAgD,EAAA,MACbhD,EACAiD,MACS,CAAC,OAAQ,QAAS,QAAQC,OAC/B,CAACC,EAASC,KACRD,EAAQC,GAAQC,EAAcA,eAACrD,EAAM,CAAEoD,KAAAA,IAChCD,GAET,CACEG,UAAWD,EAAcA,eAACrD,EAAM,CAAEoD,KAAM,UACxCG,cAAeF,EAAAA,eAAerD,EAAOwD,GACnCA,EAAE/B,MAAM,CAAE2B,KAAM,QAASK,UAAU,OAK3CnC,WAAY,QACZC,UAAUC,GACR,MAAMC,EAAQD,EAAIE,KAAKD,MACjB2B,EAAO3B,EAAM2B,MAAQ3B,EAAMiC,OAC5BjC,EAAMkC,cACTlC,EAAMkC,aACHjB,EAAYU,IAASV,EAAkB,QACvCjB,EAAMgC,UAAcL,GAAiB,SAATA,EAAiC,GAAd,eAGtDjB,OAAMA,CAACC,EAAUZ,IACRA,EAAIe,QAAQqB,QACS,IAAzBpC,EAAIE,KAAKD,MAAMoC,MAAiB,QAAU,QAAU,UACrDrC,EAAIE,KAAMU,ICrCD,IAAA0B,EAAA,MAFF,SAIXb,MAAO,CACLa,OAAQ,CAACC,EAAOC,IAAUX,EAAAA,eALjB,SAKiBA,CAAqB,GAAIU,EAAOC,IAE5D7B,OAAMA,IACG,ICPI,IAAA8B,EAAA,MADF,QAGXhB,MACS,CAAC,WAAY,MAAO,QAAS,OAAQ,WAAY,UAAUC,OAChE,CAACD,EAAOG,KACNH,EAAMG,GAAQC,EAAcA,eANvB,QAM8B,CAAED,KAAAA,IAC9BH,GAET,CACEiB,MAAOb,EAAcA,eAVhB,QAUuB,CAAED,KAAM,WAI1C9B,WAAY,QACZa,OAAOC,EAAUZ,GACf,IAAI4B,EAAO5B,EAAIE,KAAKD,MAAM2B,KAS1B,OAR0D,IAAtD,CAAC,WAAY,SAAU,YAAYe,QAAQf,KAAcA,EAAO,SAEpEA,EACE,CACEgB,SAAU,YACVC,OAAQ,eACRC,SAAU,kBACVlB,IAAS,SACN5B,EAAIe,QAAQqB,MAAMW,KAAKnB,EAAM5B,EAAIE,KAAMU,KC3BnCoC,EAAA,CACXxE,KAAM,aACNsB,WAAY,QACZC,UAAUC,GACN,MAAMC,EAAQD,EAAIE,KAAKD,MAClBA,EAAMkC,cACPlC,EAAMkC,YAAc,aAG5BxB,OAAMA,CAACC,EAAUZ,IACNA,EAAIe,QAAQqB,MAAM,SAAmC,IAAzBpC,EAAIE,KAAKD,MAAMoC,MAAiB,QAAU,IAAM,UAAUrC,EAAIE,KAAMU,ICVhGqC,EAAA,CACXzE,KAAM,OACNsB,WAAY,cACZC,UAAUC,GACN,MAAMC,EAAQD,EAAIE,KAAKD,MAClBA,EAAMiD,WAIDjD,EAAMiD,WAAWC,MAAKlD,EAAMiD,WAAWC,IAAM,MAHnDlD,EAAMiD,WAAa,CACfC,IAAK,MAGblD,EAAMmD,YAAcpD,EAAIqD,KAAKb,MAC7BvC,EAAMqD,WAAY,ICXXC,EAAA,CACX/E,KAAM,QACNmC,OAAMA,CAAC6C,EAAGxD,IACCA,EAAIoC,MAAMqB,IAAI,CAACxD,MAAO,CAACyD,KAAM,KAAM,CACtCC,QAASA,IAAM,CACX3D,EAAIoC,MAAMmB,IAAIvD,EAAIE,KAAMsD,OCDzB,ICSAI,EAAA,CACb/D,EACA2B,ECXa,IACRA,OAHM,cAKTC,MAAO,GACPd,OAAMA,CAACC,EAAUZ,IACNA,EAAIe,QAAQqB,MAAmB,YAAEpC,EAAIE,KAAMU,IDQxD0B,EACAG,EACAO,EDfa,IACRA,EACHxE,KAJS,kBAKTmC,OAAMA,CAACC,EAAUZ,IACNA,EAAIe,QAAQqB,MAAuB,gBAAEpC,EAAIE,KAAMU,ICa5DqC,EACA5C,EACAC,EACAW,EACAsC,GExBa,IAAAM,EAAA,CACbC,QAASC,WACTC,QAASD,WACTE,OAAQF,UACRG,KAAMH,QACNI,OAAQJ,UACRK,KAAML,QACNvE,OAAQ,WACRyB,SAAU8C,YACVf,WAAYe,cACZM,gBAAiBN,mBACjBvC,WAAYuC,cACZO,YAAaP,eACbQ,OAAQR,UACRzD,OAAQyD,UACRlE,SAAUkE,iBACV1D,MAAO0D,cACPtB,MAAOsB,SACPS,YAAaT,eACbU,WAAYV,cACZlB,OAAQkB,eACRW,cAAeX,iBACfnB,SAAUmB,YACVY,SAAUZ,YACVa,KAAMb,QACNtE,MAAO,UACPgE,IAAKM,OACLR,IAAKQ,OACLd,KAAMc,QACNc,aAAcd,gBACde,SAAUf,YACVrE,MAAO,UACPqF,MAAO,UACPpF,QAAS,YACTqF,OAAQ,aC1BV,SAASC,EAAKhF,EAAOzB,GACd2B,EAAWA,YAACF,EAAOzB,IACpB0G,EAAE,QAACC,OAAOlF,EAAMzB,MAClByB,EAAMzB,GAAQ,CAAE4G,CAAC5G,GAAOyB,EAAMzB,GAAO6G,MAAM,IAI/C,SAASC,EAAQC,GACf,OAAe,IAARA,EAST,SAASC,EAASnC,GAChB,MAAMoC,EAAQ,IAAKpC,GAEnB,cADOoC,EAAM7E,SACN6E,EAGM,IAAAC,EAAA,CACbC,WACE,MAAMf,EAAOgB,KAAKhB,OAClB,OAAIA,EACKA,EAAKe,WAEL,IAAIE,QAASC,GAAMA,MAG9BC,cAAcxD,GACZ,MAAMqC,EAAOgB,KAAKhB,OAClB,OAAIA,EACKA,EAAKoB,eAAezD,GAEpB,IAAIsD,QAASC,GAAMA,MAG9BG,mBAAmBjG,GACjB,MAAMkG,EAAQN,KAAKO,GAAGC,KAAKpG,EAAIqG,SAC3BH,GACFA,EAAMI,iBAGVC,YAAYnG,IACT,CAAC,YAAa,WAAY,MAAO,OAAQ,OAAQ,MAAO,SAASoG,QAC/DhI,KArCP,SAAkBiI,EAAKjI,GACjB2B,EAAWA,YAACsG,EAAKjI,KAAU0G,EAAE,QAACwB,OAAOD,EAAIjI,MAC3CiI,EAAIjI,GAAQ,CAAE6G,OAAQoB,EAAIjI,KAoCtBmI,CAASvG,EAAS5B,KAGf4B,GAEToF,SAAQA,EAACtF,KAAEA,MACT+E,EAAK/E,EAAM,SACX+E,EAAK/E,EAAM,QACJA,GAETH,UAAUC,GACR,MAAM4G,EAAM,CACVC,KAAM,CACJjF,KAAM,UACNkF,UAAW,UACX5C,KAAM,0BAER6C,MAAO,GACPtD,IAAK,CAAEC,KAAM,IACbsD,KAAM,IAUR,GARC,CAAC,OAAQ,OAAQ,MAAO,SAASR,QAAShI,IACzCwB,EAAIE,KAAK1B,GAAQyI,EAAU,QACzB,CAACrB,KAAKxF,QAAQ5B,IAAS,GAAIwB,EAAIE,KAAK1B,IAAS,IAC7CoI,EAAIpI,MAKc,WAAlBwB,EAAIqD,KAAKzB,MAAsB5B,EAAIE,KAAKD,MAAMiH,WAuB3C,GAAsB,WAAlBlH,EAAIqD,KAAKzB,MAAqB5B,EAAIE,KAAKD,MAAMiH,UAAW,CAEjE,MAAMC,EAAoBnH,EAAIE,KAAKD,MAAMiH,UACnCE,EAAqB,SAAUC,GAC/BC,OAAOC,QAAUD,OAAOC,SAAWD,QACrCA,OAAOC,OAAOC,YACZ,CACE5F,KAAM,iBACNyF,KAAM,CACJI,IAAKJ,EAAKI,IACVjJ,KAAM6I,EAAK7I,KACXkJ,IAAKL,EAAKK,IACVC,KAAMN,EAAKM,KACX/F,KAAMyF,EAAKzF,MAEbgG,UAAWC,KAAKC,OAElB,MAIN9H,EAAIE,KAAKD,MAAMiH,UAAY,SAAUG,GACnCD,EAAmBC,GACfF,GAAkD,mBAAtBA,GAC9BA,EAAkBY,MAAMnC,KAAMoC,iBA/CyB,CAC3D,MAAMZ,EAAqB,SAAUC,GAC/BC,OAAOC,QAAUD,OAAOC,SAAWD,QACrCA,OAAOC,OAAOC,YACZ,CACE5F,KAAM,iBACNyF,KAAM,CACJI,IAAKJ,EAAKI,IACVjJ,KAAM6I,EAAK7I,KACXkJ,IAAKL,EAAKK,IACVC,KAAMN,EAAKM,KACX/F,KAAMyF,EAAKzF,MAEbgG,UAAWC,KAAKC,OAElB,MAIN9H,EAAIE,KAAKD,MAAMiH,UAAY,SAAUG,GACnCD,EAAmBC,MAgCzBY,kBAAiBA,KCxIV,CACLrD,KAAM,CACJsD,kBAAkB,EAClBC,OAAQ,aACRC,WAAY,QACZC,SAAU,CACR3E,KAAM,GAER4E,WAAY,CACV5E,KAAM,IAER6E,sBAAsB,GAExBhF,IAAK,CACHiF,OAAQ,GAEVC,UAAW,CACT/H,UAAU,EACVD,SAAS,EACTmB,KAAM,UACN8G,UAAW,GACXrD,MAAM,EACN5B,SAzBQkF,EA0BRC,WA1BQD,GA4BVE,SAAU,CACRnI,UAAU,EACVD,SAAS,EACTmB,KAAM,UACN8G,UAAW,GACXrD,MAAM,EACN5B,SAlCQkF,EAmCRC,WAnCQD,KD8IZG,gBAAeA,CAACnD,EAAUoD,KACxBpD,EAASoD,UAAY,CAAC1F,EAAMb,IACnB,IAAIqD,QAAQ,CAACmD,EAASC,IAQpBF,EAAUvG,EAPC0G,IACZA,EACFD,EAAOC,GAEPF,OAMDrD,GAETwD,SACE,MAAMvE,EAAOgB,KAAKxF,QAAQwE,KAC1BgB,KAAKvC,KAAO,CACVpD,MAAO,IAAK2E,GACZwE,GAAI,CACFC,OAASC,IACPA,EAAEC,mBAGNC,MAAO5E,EAAK4E,MACZ5H,KAAM,SAGV6H,eACE,MAAMtG,IAAEA,EAAGuG,IAAEA,EAAGC,QAAEA,GAAY/D,KACxBhB,EAAOgB,KAAKxF,QAAQwE,KAC1BgF,EAAM,QAAChE,KAAKvC,KAAM,CAChBF,IAAAA,EACAuG,IAAAA,EACAhL,MAAO,CACLkG,EAAKiF,UACLjF,EAAKlG,MACL,cACAkH,KAAK+D,QAAQG,QAAU,aAAe,MAG1CF,UAAOhE,KAAKvC,KAAKpD,MAAO,CACtB8J,MAAOJ,EAAQK,YAGnBrJ,OAAOC,GAIL,OAHIA,EAASqJ,YAAcrE,KAAK+D,QAAQG,SACtClJ,EAASsJ,aAAQvB,EAAW,IAAM/C,KAAKuE,eAElCvE,KAAKwE,GACVxE,KAAKvC,KACLiC,EAAQM,KAAKxF,QAAQmD,IAAI8B,MACrBzE,EAASyJ,WACT,CAACzE,KAAK0E,QAAQ1J,MAGtB2J,SAASvK,EAAKY,GACZ,MAAMyC,EAAOrD,EAAIE,KACXsK,EAAM,GAAG5E,KAAKzC,MAAMnD,EAAImD,MACxBM,EAAMJ,EAAKI,IACXgH,EAAU7E,KAAK6E,QAAQpH,KAA6B,IAApBA,EAAK2D,KAAKD,OAC1CoB,OAAEA,EAAQ1E,IAAKiH,GAAS9E,KAAKvC,KAAKpD,MAClC0K,EAAMtH,EAAK2D,KAAKtI,aACf2E,EAAK2D,KAAKtI,aACV2E,EAAK2D,KAAKD,MACjB,MAAM6D,EAAOtF,EAAQjC,EAAK2D,KAAK3B,MAC3BzE,EACAgF,KAAKwE,GACHnD,EAAAA,QAAW,CACT5D,EAAK2D,KACL,CACE/G,MAAO,IACFuF,EAASnC,EAAK2D,MAAQ,IACzB6D,YAAaxH,EAAKwH,cAAe,EACjCrM,KAAMwB,EAAI8K,GACVC,MAAO/K,EAAIgL,oBACI,eAAX7C,EACA,CAAEE,SAAU,GAAIC,WAAY,IAC5B,IAEN5J,MAAOkH,KAAK7E,QAAQkK,WAClBN,GAAOtH,EAAKwG,UACZ,gBAEF1G,IAAQqH,EAAH,KACLd,IAAK1J,EAAIqG,QACTzE,KAAM,cAGV,CACE+B,QAASA,IAAM/C,KACX6J,EAAU,CAAES,MAAOA,IAAMtF,KAAKuF,SAAS9H,EAAMmH,EAAKxK,IAAS,KAGvE,MAAkB,WAAXmI,GAAuB7C,EAAQoF,IAASpF,EAAQ7B,EAAI4B,MACvDuF,EACAhF,KAAKwF,QAAQ/H,EAAMmH,EAAK,CAACI,KAE/BH,QAAQpH,GACN,IAAgC,IAA5BuC,KAAKxF,QAAQwE,KAAKmC,MAAiB,OAAO,EAC9C,MAAMA,EAAQ1D,EAAK0D,MACnB,SAAWA,EAAMA,QAAUA,EAAMsE,QAAW/F,EAAQyB,EAAM1B,QAE5D8F,SAAS9H,EAAMmH,EAAKxK,GAAK,IAAAsL,EAAAC,EACvB,MAAMC,EAAY,IAAKnI,EAAK0D,OACtB0E,EAAW,IAAKpI,EAAKwD,MAC3B,IAAgC,IAA5BjB,KAAKxF,QAAQwE,KAAKmC,MAAiB,OAAO,EAC9C,IAAMyE,EAAUzE,QAAUyE,EAAUH,QAAW/F,EAAQkG,EAAUnG,MAC/D,OACF,MAAMqG,EArPa,YAqPKD,EArPd7J,KAsPV,MAAM+J,EAAY/F,KAAKgG,QAAQ,SACzBhL,EAAW,CACf+K,EACIA,EAAU,CACR5E,cAAKuE,EAAEtL,EAAI6L,eAAO,IAAAP,GAAU,QAAVA,EAAXA,EAAaQ,gBAAbR,IAAqBA,OAArBA,EAAAA,EAAuB9I,MAC9Ba,KAAMrD,EAAIqD,KACVjD,QAASwF,KAAKxF,kBACdmL,EACFvL,EAAI6L,eAAO,IAAAN,GAAU,QAAVA,EAAXA,EAAaO,gBAAbP,IAAqBA,OAArBA,EAAAA,EAAuB/I,OAG7B,IACG8C,EAAQmG,EAASpG,QACjBoG,EAAS5E,MAAQ4E,EAASJ,UAC1B/F,EAAQmG,EAASvH,MAClB,CACA,MAAMhE,EAAO,CACX0B,KAAM6J,EAAS7J,MAAQ,UACvB3B,MAAOuF,EAASiG,GAChBtI,IAAQqH,EAAH,cAGAtK,EAAKD,MAAMiE,YACXhE,EAAKD,MAAMoF,YACXnF,EAAKD,MAAM4G,YACX3G,EAAKD,MAAM8L,aACX7L,EAAKD,MAAMoL,OAElB,MAAM9I,EAAQmJ,EAAQ,QAAU,UACsB,IAAAM,EAAtD,GAAIP,EAAS5E,OAAS1G,EAAAA,YAAYD,EAAKD,MAAOsC,GAC5CrC,EAAKD,MAAMsC,GAAoB,QAAdyJ,EAAGhM,EAAI6L,eAAOG,IAAAA,WAAAA,EAAXA,EAAaC,eAAO,IAAAD,OAAA,EAApBA,EAAsBxJ,MAE5C5B,EAA4B,SAAnB6K,EAASM,MAAmB,UAAY,QAC/CnG,KAAKwE,GAAGnD,EAAU,QAAC,CAACwE,EAAUvL,IAAQ,CACpCkF,CAACoG,EAAUU,MAAQ,WAAY,IAC7BtG,KAAKwE,GAAG,CACNxI,MACoB,IAAlB6J,EAASvH,KACL,yBACAuH,EAASvH,MAAQ,GACvBjE,MAAO,CACL2B,MACoB,IAAlB6J,EAASvH,KACL,yBACAuH,EAASvH,MAEjBf,IAAQqH,EAAH,SAMf,MAAM2B,EAAQlF,UAAW,CACvBuE,EACA,CACEvL,MAAOuF,EAASgG,GAChBrI,IAAQqH,EAAH,MACL9L,MAAO,gBACPkD,KAAM4J,EAAU5J,MAAQ,UAQ5B,cAJOuK,EAAMlM,MAAMoF,YACZ8G,EAAMlM,MAAM8G,aACZoF,EAAMlM,MAAMoL,OAEZzF,KAAKwE,GAAG+B,EAAOvL,IAExBwK,QAAQ/H,EAAMmH,EAAK5J,GACjB,MAAM6C,EAAMJ,EAAKI,IACjB,OAAOmC,KAAKwE,GACV,CACE1L,MAAOkH,KAAK7E,QAAQkK,WAAWxH,EAAI/E,MAAO,eAC1CkD,KAAM,MACN3B,MAAOwD,GAAO,CAAEC,KAAM,IACtBP,IAAQqH,EAAH,OAEP5J,IAGJ0J,QAAQ1J,GACN,MAAM2C,EAAMqC,KAAKxF,QAAQmD,KAAO,GAChC,OAAOqC,KAAKwE,GACV,CACExI,KAAM,MACN3B,MAAOsD,EACP7E,MAAOkH,KAAK7E,QAAQkK,WAAW1H,EAAI7E,MAAO,eAC1CyE,IAAQyC,KAAKzC,IAAR,OAEPvC,IAGJuJ,cACE,IAAIiC,EAAK,GAOT,GANK9G,EAAQM,KAAKxF,QAAQqI,UAAUpD,OAClC+G,EAAGC,KAAKzG,KAAK0G,iBAEVhH,EAAQM,KAAKxF,QAAQyI,SAASxD,OACjC+G,EAAGC,KAAKzG,KAAK2G,iBAEVH,EAAGI,OACN,OAEF,IAAInE,SAAEA,EAAQC,WAAEA,EAAUH,OAAEA,GAAWvC,KAAKvC,KAAKpD,MAClC,eAAXkI,IACFE,EAAWC,EAAa,IAE1B,MAAMsC,EAAOhF,KAAKwE,GAChB,CACExI,KAAM,WACNlD,MAAO,8BACPyE,IAAQyC,KAAKzC,IAAR,KACLlD,MAAO,CACLoI,SAAAA,EACAC,WAAAA,EACA4C,MAAO,IACPuB,OAAO,IAGXL,GAGF,MAAkB,WAAXjE,EACHyC,EACAhF,KAAKwE,GACH,CACExI,KAAM,MACNlD,MAAO,cACPuB,MAAO,CAAEyD,KAAM,IACfP,IAAQyC,KAAKzC,IAAR,MAEP,CAACyH,KAIT2B,eACE,MAAM1D,EAAW,IAAKjD,KAAKxF,QAAQyI,UAC7BH,EACJG,EAASH,WAAa9C,KAAK+D,QAAQ+C,IAAIC,EAAE,UAAY,KAKvD,cAJO9D,EAASH,iBACTG,EAASD,aACTC,EAASpF,WACToF,EAASxD,KACTO,KAAKwE,GACV,CACExI,KAAM,SACN3B,MAAO4I,EACPnK,MAAO,eACP8K,MAAO,CAAEvK,MAAO4J,EAAS5J,MAAO2N,WAAY,QAC5CxD,GAAI,CACFR,MAAOA,KACL,MAAMiE,EAAOjH,KAAK+D,QAAQ+C,IAC1B9G,KAAKxF,QAAQyI,SAASD,MAClBhD,KAAKxF,QAAQyI,SAASD,MAAMiE,GAC5BA,EAAKC,gBAGb3J,IAAQyC,KAAKzC,IAAR,MAEP,CAACuF,KAGL4D,gBACE,MAAM7D,EAAY,IAAK7C,KAAKxF,QAAQqI,WAC9BC,EACJD,EAAUC,WAAa9C,KAAK+D,QAAQ+C,IAAIC,EAAE,WAAa,KAKzD,cAJOlE,EAAUC,iBACVD,EAAUG,aACVH,EAAUhF,WACVgF,EAAUpD,KACVO,KAAKwE,GACV,CACExI,KAAM,SACN3B,MAAOwI,EACP/J,MAAO,gBACP8K,MAAO,CAAEvK,MAAOwJ,EAAUxJ,OAC1BmK,GAAI,CACFR,MAAOA,KACL,MAAMiE,EAAOjH,KAAK+D,QAAQ+C,IAC1B9G,KAAKxF,QAAQqI,UAAUG,MACnBhD,KAAKxF,QAAQqI,UAAUG,MAAMiE,GAC7BA,EAAKxD,SAAS0D,MAAM,UAG5B5J,IAAQyC,KAAKzC,IAAR,MAEP,CAACuF,MEpbP,MAAMjH,EAAQ,GAuDd,IAAmBO,ECpDnB,SAASgL,EAAYC,EAAKrG,GAGxB,OAFI1B,UAAGgI,QAAQD,GAAMA,EAAM,CAAE5H,KAAM4H,GACzB/H,UAAGiI,MAAMF,IAAS/H,EAAAA,QAAGwB,OAAOuG,KAAMA,EAAM,CAAE5H,KAAMuB,IACnDqG,EAGM,SAASG,EAAUV,EAAKW,GACrC,MAAO,CACLC,OAAMA,IACGD,EAAEE,SAAS3I,OAEpB4I,OAAO1C,GACL,MAAM9K,EAAMqN,EAAEI,YAAY3C,GAC1B,GAAK9K,EACL,OAAOqN,EAAElH,GAAGC,KAAKpG,EAAIqG,UAEvBV,SAAS+H,GACA,IAAI7H,QAAQ,CAACmD,EAASC,KAC3B,MAAM0E,EAAQjB,EAAI9L,SACZgN,EAAM,CAACP,EAAEE,SAAS5H,YACxBgI,EACGE,OAAQ/H,IAAOA,EAAEgI,SACjBtH,QAASV,IACR8H,EAAIvB,KAAKvG,EAAEH,cAEfE,QAAQ+H,IAAIA,GACTG,KAAK,KACJ/E,GAAQ,GACR0E,GAAYA,GAAS,KAEtBX,MAAOzD,IACNL,EAAOK,GACPoE,GAAYA,EAASpE,GACrB+D,EAAElH,GAAG6H,KAAK,gBAAiB1E,EAAG,CAAEoD,IAAAA,IAChCW,EAAEY,UAAU,gBAAiB3E,EAAG,CAAEoD,IAAAA,QAI1C3G,cAAaA,CAACxD,EAAOmL,IACZ,IAAI7H,QAAQ,CAACmD,EAASC,KAC3B,MAAMjJ,EAAMqN,EAAEI,YAAYlL,GAC1B,IAAKvC,EAAK,OACV,MAAMkO,EAAMb,EAAE1N,QAAQK,EAAI8K,IACpB8C,EAAM,CAACP,EAAEE,SAASxH,cAAc/F,EAAI8K,KAC1CqD,UAAQD,GACLL,OAAQ/H,IAAOA,EAAEgI,SACjBtH,QAASV,IACR8H,EAAIvB,KAAKvG,EAAEH,cAEfE,QAAQ+H,IAAIA,GACTG,KAAK,KACJ/E,EAAQ,MACR0E,GAAYA,EAAS,QAEtBX,MAAOzD,IACNL,EAAOK,GACPoE,GAAYA,EAASpE,GACrB+D,EAAElH,GAAG6H,KAAK,sBAAuB1E,EAAG,CAAE/G,MAAAA,EAAOmK,IAAAA,QAIrDzG,mBAAmBmI,EAAQC,GAAW,GACpC3B,EAAI4B,OAAOC,WAAWH,GAAQ5H,QAASjE,IACjC8L,GAAUzI,KAAK4I,sBAAsBjM,GACzC8K,EAAEoB,QAAQlM,GAAOiE,QAASxG,IACxBqN,EAAEE,SAAStH,mBAAmBjG,QAIpCwO,sBAAsBJ,GACpB1B,EAAI4B,OAAOC,WAAWH,GAAQ5H,QAASjE,IACrC8K,EAAEoB,QAAQlM,GAAOiE,QAASxG,IACxB,MAAML,EAAU0N,EAAE1N,QAAQK,EAAI8K,IACzBnL,IACD+O,MAAMC,QAAQhP,GAChBA,EAAQ6G,QAAS5B,IACfA,EAAKqB,uBAEEtG,GACTA,EAAQsG,2BAKhBgH,IAAK,CACHxM,QAASA,CAACA,GAAU,KAClBiM,EAAIkC,eAAe,CAAEnO,UAAWA,KAElCC,SAAUA,CAACA,GAAW,KACpBgM,EAAIkC,eAAe,CAAElO,WAAYA,KAEnC2E,KAAMA,CAACwJ,GAAS,KACdnC,EAAIkC,eAAe,CAAEvJ,OAAQwJ,MAGjChG,SAAU,CACRpI,QAASA,CAACA,GAAU,KAClBiM,EAAIoC,cAAc,CAAErO,UAAWA,KAEjCC,SAAUA,CAACA,GAAW,KACpBgM,EAAIoC,cAAc,CAAEpO,WAAYA,KAElC2E,KAAMA,CAACwJ,GAAS,KACdnC,EAAIoC,cAAc,CAAEzJ,OAAQwJ,MAGhCD,eAAgBA,CAAC3O,EAAQ,MACvB,IAAIgN,EAAMD,EAAYK,EAAEjN,QAAQqI,WAAW,GAC3CmB,UAAOqD,EAAKhN,GACZoN,EAAEjN,QAAQqI,UAAYwE,EACtBP,EAAIqC,kBAEND,cAAeA,CAAC7O,EAAQ,MACtB,IAAIgN,EAAMD,EAAYK,EAAEjN,QAAQyI,UAAU,GAC1Ce,UAAOqD,EAAKhN,GACZoN,EAAEjN,QAAQyI,SAAWoE,EACrBP,EAAIqC,kBAEN1F,OAAMA,CAAC2F,EAAWC,IACT,IAAIpJ,QAAQ,CAACmD,EAASC,OAEM,IAA/BoE,EAAEjN,QAAQ8O,iBACNrJ,QAAQmD,UACR0D,EAAI/G,YAEPoI,KAAK,KACJ,IAAI/D,EAAW0C,EAAI1C,WACnBqD,EAAE8B,aAAanF,GACZ+D,KAAK,KACJ7I,UAAGkK,SAASJ,IAAcK,EAAAA,OAAO,IAAML,EAAUhF,EAAU0C,IAC3DxH,EAAAA,QAAGkK,SAAS/B,EAAEjN,QAAQkP,WACpBD,EAAAA,OAAO,IAAMhC,EAAEjN,QAAQkP,SAAStF,EAAU0C,IAC5CW,EAAElH,GAAG6H,KAAK,SAAUhE,EAAU0C,GAC9B1D,EAAQgB,KAET+C,MAAOzD,SAEXyD,MAAM,IAAIwC,KACTrK,UAAGkK,SAASH,IAAWI,EAAMA,OAAC,IAAMJ,EAAOvC,KAAQ6C,IACnDtG,KAAUsG,OAwDlBC,QAAQC,IAEgB,iBAAXA,IACTA,EAAS,CAAEC,OAAQD,IAGd/C,EAAIiD,MAAMF,IAGnBG,SAASC,EAAIC,GACX,IAAIC,EAAW,EACf,OAAO,YAAaR,GAClB,MAAMS,EAAUpK,KACVkC,EAAMD,KAAKC,MACbA,EAAMiI,IAAaD,GAAS,KAC9BC,EAAWjI,EACX+H,EAAGI,KAAKD,KAAYT,MAK1BW,SAASL,EAAIC,GACX,IAAIK,EAAQ,KACZ,OAAO,YAAaZ,GAClB,MAAMS,EAAUpK,KACF,OAAVuK,GACFC,aAAaD,GAEfA,EAAQE,WAAW,KACjBR,EAAGI,KAAKD,KAAYT,IACnBO,GAAS,ODlOpB,SAAkBrO,GACf,CACC,aACA,SACA,QACA,eACA,WACA,aACA,QACA,cACA,gBACA,QACA,OACA,SACA,OACA,SACA,cACAC,OAAO,CAACD,EAAOjD,KACfiD,EAAMjD,GAAQqD,EAAcA,eAACrD,GACtBiD,GACNA,GACHA,EAAM6O,KAAO7O,EAAMoD,aACnBpD,EAAM8O,OAAS9O,EAAM+C,YACrB/C,EAAM+O,KAAO/O,EAAMuB,WACnBvB,EAAMqB,SAAWrB,EAAMiD,cA0DzB+L,CAAShP,GAjCT,SAAmBA,GACjBA,EAAmB,YAAII,EAAcA,eAAC,SAAU,CAAEQ,OAAO,IAiC3DqO,CAAUjP,GAxDV,SAAkBA,GAChB,MAAMkP,EAAQ,CACZC,YAAa,CAAC,QAAS,GACvBC,WAAY,CAAC,OAAQ,GACrBC,YAAa,CAAC,QAAS,GACvBC,cAAe,CAAC,QAAS,GACzBC,aAAc,CAAC,OAAQ,GACvBC,cAAe,CAAC,QAAS,IAG3BvK,OAAOwK,KAAKP,GAAOjP,OAAO,CAACD,EAAO0B,KAChC1B,EAAM0B,GAAOtB,EAAcA,eAAC,QAAUG,GACpCA,EAAE/B,MAAM,CAAE2B,KAAM+O,EAAMxN,GAAK,GAAIgO,UAAWR,EAAMxN,GAAK,MAEhD1B,GACNA,GAEHA,EAAM2P,WAAa3P,EAAMmP,YACzBnP,EAAM4P,UAAY5P,EAAMoP,WACxBpP,EAAM6P,WAAa7P,EAAMqP,YAsC3BS,CAAS9P,GAxBT,SAAmBA,GACjB,MAAMkP,EAAQ,CACZa,MAAO,CAAC,QAAS,GACjBnK,KAAM,CAAC,OAAQ,GACfoK,cAAe,CAAC,OAAQ,GACxBC,eAAgB,CAAC,QAAS,IAG5BhL,OAAOwK,KAAKP,GAAOjP,OAAO,CAACD,EAAO0B,KAChC1B,EAAM0B,GAAOtB,EAAcA,eAAC,SAAWG,GACrCA,EAAE/B,MAAM,CACN0R,WAAYhB,EAAMxN,GAAK,GACvBgO,UAAWR,EAAMxN,GAAK,MAGnB1B,GACNA,GAEHA,EAAMmQ,YAAcnQ,EAAM+P,MAC1B/P,EAAMoQ,WAAapQ,EAAM4F,KAM3ByK,CAAUrQ,IAhCSO,EAiCTP,GA/BNsQ,eAAiBlQ,EAAcA,eADpB,SAC2B,CAAEmQ,KAAM,aAChDhQ,EAAEiQ,WAAapQ,EAAcA,eAFhB,SAEuB,CAAEmQ,KAAM,SAC5ChQ,EAAEkQ,eAAiBrQ,EAAcA,eAHpB,SAG2B,CAAEmQ,KAAM,aE7DnC,IAAAG,EAAA,CACXtN,aAAc,QACd5D,SAAU,QACVuD,YAAa,QACbE,cAAe,QACf9B,SAAU,QACVwB,KAAM,QACND,OAAQ,QACRM,WAAY,QACZF,OAAQ,WCPZ,MAAM6N,EAAW,CACb5T,KAAM,WACN6T,KAAKC,EAAQjP,EAAMqJ,GACf,MAAMnH,EAgCd,SAAkBA,GACd,OAAIL,EAAE,QAACgI,QAAQ3H,GACJ,CAAC6M,SAAU7M,GACXL,EAAE,QAACC,OAAOI,GACV,CAACgN,QAAShN,GACVL,EAAE,QAACiI,MAAM5H,GACT,CAAC6M,UAAU,GACXlN,EAAE,QAACkK,SAAS7J,GACZ,CAACwD,UAAWxD,GACXL,EAAAA,QAAGwB,OAAOnB,GAGXA,EAFA,GA1CKiN,CAASF,EAAOG,YAC5B,IAAqB,IAAjBlN,EAAI6M,SACJE,EAAOI,YACPhG,EAAIzG,mBAAmB,CAAC5C,EAAKd,YAC1B,CAAA,IAAAoQ,EACH,MAAMhN,EAAW,CACbyM,UAAU,EACVrJ,UAASA,CAACvF,EAAGsC,IACF,IAAID,QAAQ,CAACmD,EAASC,KACzB/D,UAAG0N,MAAM9M,GAAKmD,EAAOtD,EAAS4M,SAAWvJ,SAG9CzD,GAEDwB,EAA2B4L,QAAtBA,EAAGtP,EAAKwP,OAAOhH,mBAAO8G,WAAAA,EAAnBA,EAAqB7G,gBAAQ,IAAA6G,OAAA,EAA7BA,EAA+BnQ,MAC7C,GAAKmD,EAAS4M,QAEP,CACH,MAAMO,EAAQnN,EAAS4M,QAAQO,MAAM,6BACjCA,IACAnN,EAAS4M,QAAU7F,EAAIC,EAAEmG,EAAM,GAAI,CAAC/L,MAAAA,UAJxCpB,EAAS4M,QAAU7F,EAAIC,EAAE,WAAY,CAAC5F,MAAAA,KAAYA,GAA6B,OAApB2F,EAAIqG,YAAuB,eAAiB,QAO3GT,EAAOU,UAAUrN,SAAW,CAACA,GAEjC+G,EAAIuG,KAAK5P,IAEb6P,SAAS3D,GACL6C,EAASC,QAAQ9C,KCtBzB,SAAS4D,EAAQC,GACfA,EAAWC,eAAexP,GAE1B6C,OAAOwK,KAAKiB,GAAa3L,QAAS8M,IAChCF,EAAWG,cAAcD,EAAGnB,EAAYmB,MAG1C/T,EAAWiH,QAASgN,IAClBJ,EAAWI,UAAUA,EAAUhV,KAAMgV,KAGvCJ,EAAWK,SAASrB,GAEpBxO,EAAQ4C,QAASkN,IACfN,EAAWM,OAAOA,KAGpBhN,OAAOwK,KAAKyC,GAAQnN,QAAShI,IAC3B4U,EAAW3R,MAAMjD,GAAQmV,EAAOnV,KAGZ,oBAAX8I,QAA0BA,OAAOsM,MAC1CR,EAAWS,OAAO,CAACrQ,EAAGsQ,KACpBA,EAAIC,IAAIzM,OAAOsM,QChCfR,MAAAA,EDsCGY,UAAkB,CACvBC,GAAI,mBACJC,QAAS,WACTxO,QAAAA,EACAyN,QAAAA,EACA/F,UAAAA,EACA+G,MAAO,CACLC,OAAQ,CAAC,MAAO,QAChBrP,MAAO,CAAC,aACR5B,IAAK,CAAC,QAAS,WC7CC,oBAAXmE,SACPA,OAAO+M,WAAajB,GAGlB3R,MAAAA,EAAQ2R,EAAW3R"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@longhongguo/form-create-ant-design-vue",
3
- "version": "3.2.42",
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>
package/src/core/api.js CHANGED
@@ -208,22 +208,27 @@ export default function extendApi(api, h) {
208
208
  },
209
209
  // 节流,在指定时间间隔内,如果多次触发,只执行一次
210
210
  throttle(fn, delay) {
211
- let timer = null
211
+ let lastTime = 0
212
212
  return function (...args) {
213
- if (timer) clearTimeout(timer)
214
- timer = setTimeout(() => {
215
- fn.apply(this, args)
216
- }, delay)
213
+ const context = this
214
+ const now = Date.now()
215
+ if (now - lastTime >= (delay || 0)) {
216
+ lastTime = now
217
+ fn.call(context, ...args)
218
+ }
217
219
  }
218
220
  },
219
221
  // 防抖,在指定时间间隔内,如果多次触发,只执行最后一次
220
222
  debounce(fn, delay) {
221
223
  let timer = null
222
224
  return function (...args) {
223
- if (timer) clearTimeout(timer)
225
+ const context = this
226
+ if (timer !== null) {
227
+ clearTimeout(timer)
228
+ }
224
229
  timer = setTimeout(() => {
225
- fn.apply(this, args)
226
- }, delay)
230
+ fn.call(context, ...args)
231
+ }, delay || 0)
227
232
  }
228
233
  }
229
234
  }