From ee8afa98b9f933b2a712e54e8c8caf0125a68dc6 Mon Sep 17 00:00:00 2001 From: vdpAdmin Date: Fri, 7 Jan 2022 10:58:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=8F=B7=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E5=88=B02.2.0=EF=BC=8C=E7=BA=A7=E8=81=94=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=A2=9E=E5=8A=A0=E5=A4=9A=E9=80=89=E5=B1=9E?= =?UTF-8?q?=E6=80=A7=EF=BC=8C=E4=BF=AE=E5=A4=8Daxios=E6=8A=A5=E9=94=99?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=85=B6=E4=BB=96=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E5=B0=8F=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- .../field-widget/cascader-widget.vue | 2 +- .../form-widget/field-widget/fieldMixin.js | 8 + .../field-widget/file-upload-widget.vue | 8 +- .../field-widget/picture-upload-widget.vue | 1 + src/components/form-designer/index.vue | 9 +- .../cascader-defaultValue-editor.vue | 18 + .../cascader-multiple-editor.vue | 24 ++ .../checkbox-defaultValue-editor.vue | 18 + .../field-radio/radio-defaultValue-editor.vue | 18 + .../select-defaultValue-editor.vue | 18 + .../property-editor/propertyMixin.js | 8 + .../form-designer/widget-panel/index.vue | 4 +- .../widget-panel/templatesConfig.js | 16 +- .../widget-panel/widgetsConfig.js | 1 + .../container-item/container-item-wrapper.vue | 2 +- .../container-item/containerItemMixin.js | 13 +- .../container-item/data-table-item.vue | 309 ++++++++++++++++++ .../container-item/sub-form-item.vue | 10 +- src/components/form-render/index.vue | 84 ++++- src/lang/en-US.js | 25 ++ src/lang/zh-CN.js | 25 ++ src/utils/config.js | 2 +- src/utils/format.js | 214 ++++++++++++ src/utils/util.js | 14 +- 25 files changed, 815 insertions(+), 38 deletions(-) create mode 100644 src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-defaultValue-editor.vue create mode 100644 src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue create mode 100644 src/components/form-designer/setting-panel/property-editor/field-checkbox/checkbox-defaultValue-editor.vue create mode 100644 src/components/form-designer/setting-panel/property-editor/field-radio/radio-defaultValue-editor.vue create mode 100644 src/components/form-designer/setting-panel/property-editor/field-select/select-defaultValue-editor.vue create mode 100644 src/components/form-render/container-item/data-table-item.vue create mode 100644 src/utils/format.js diff --git a/package.json b/package.json index fad2997..4b5d3cf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "variant-form", - "version": "2.1.9", + "version": "2.2.0", "private": false, "scripts": { "serve": "vue-cli-service serve --open src/main.js", diff --git a/src/components/form-designer/form-widget/field-widget/cascader-widget.vue b/src/components/form-designer/form-widget/field-widget/cascader-widget.vue index 72cc4e0..9e54b95 100644 --- a/src/components/form-designer/form-widget/field-widget/cascader-widget.vue +++ b/src/components/form-designer/form-widget/field-widget/cascader-widget.vue @@ -7,7 +7,7 @@ :size="field.options.size" :clearable="field.options.clearable" :filterable="field.options.filterable" - :props="{ checkStrictly: field.options.checkStrictly, expandTrigger: 'hover' }" + :props="{ checkStrictly: field.options.checkStrictly, multiple: field.options.multiple, expandTrigger: 'hover' }" @visible-change="hideDropDownOnClick" @expand-change="hideDropDownOnClick" :placeholder="field.options.placeholder || i18nt('render.hint.selectPlaceholder')" @focus="handleFocusCustomEvent" @blur="handleBlurCustomEvent" diff --git a/src/components/form-designer/form-widget/field-widget/fieldMixin.js b/src/components/form-designer/form-widget/field-widget/fieldMixin.js index 0531a09..4c08d6d 100644 --- a/src/components/form-designer/form-widget/field-widget/fieldMixin.js +++ b/src/components/form-designer/form-widget/field-widget/fieldMixin.js @@ -519,6 +519,14 @@ export default { reloadOptions(options) { this.field.options.optionItems = deepClone(options) }, + + /** + * 返回radio/checkbox/select/cascader的选项数据 + * @returns 选择项数组 + */ + getOptions() { + return this.field.options.optionItems + }, disableOption(optionValue) { this.disableOptionOfList(this.field.options.optionItems, optionValue) diff --git a/src/components/form-designer/form-widget/field-widget/file-upload-widget.vue b/src/components/form-designer/form-widget/field-widget/file-upload-widget.vue index 21579da..0a082ba 100644 --- a/src/components/form-designer/form-widget/field-widget/file-upload-widget.vue +++ b/src/components/form-designer/form-widget/field-widget/file-upload-widget.vue @@ -18,9 +18,9 @@
{{file.name}} - - + +
@@ -200,7 +200,7 @@ removeUploadFile(fileName) { let foundIdx = -1 - this.fileList.forEach((file,idx) => { + this.fileList.forEach((file, idx) => { if (file.name === fileName) { foundIdx = idx } diff --git a/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue b/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue index fdc39f2..746e372 100644 --- a/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue +++ b/src/components/form-designer/form-widget/field-widget/picture-upload-widget.vue @@ -169,6 +169,7 @@ if (file.status === 'success') { //this.fileList.push(file) /* 上传过程中,this.fileList是只读的,不能修改赋值!! */ this.updateUploadFieldModelAndEmitDataChange(fileList) + this.fileList = deepClone(fileList) this.uploadBtnHidden = fileList.length >= this.field.options.limit } diff --git a/src/components/form-designer/index.vue b/src/components/form-designer/index.vue index 97bb090..f322f1f 100644 --- a/src/components/form-designer/index.vue +++ b/src/components/form-designer/index.vue @@ -64,10 +64,11 @@ import ToolbarPanel from './toolbar-panel/index' import SettingPanel from './setting-panel/index' import VFormWidget from './form-widget/index' - import {createDesigner} from "@/components/form-designer/designer"; - import {addWindowResizeHandler, deepClone, getQueryParam} from "@/utils/util"; - import {MOCK_CASE_URL, VARIANT_FORM_VERSION} from "@/utils/config"; - import i18n, { changeLocale } from "@/utils/i18n"; + import {createDesigner} from "@/components/form-designer/designer" + import {addWindowResizeHandler, deepClone, getQueryParam} from "@/utils/util" + import {MOCK_CASE_URL, VARIANT_FORM_VERSION} from "@/utils/config" + import i18n, { changeLocale } from "@/utils/i18n" + import axios from "axios" export default { name: "VFormDesigner", diff --git a/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-defaultValue-editor.vue b/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-defaultValue-editor.vue new file mode 100644 index 0000000..8ccc44e --- /dev/null +++ b/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-defaultValue-editor.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue b/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue new file mode 100644 index 0000000..f67a171 --- /dev/null +++ b/src/components/form-designer/setting-panel/property-editor/field-cascader/cascader-multiple-editor.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/components/form-designer/setting-panel/property-editor/field-checkbox/checkbox-defaultValue-editor.vue b/src/components/form-designer/setting-panel/property-editor/field-checkbox/checkbox-defaultValue-editor.vue new file mode 100644 index 0000000..9660985 --- /dev/null +++ b/src/components/form-designer/setting-panel/property-editor/field-checkbox/checkbox-defaultValue-editor.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/form-designer/setting-panel/property-editor/field-radio/radio-defaultValue-editor.vue b/src/components/form-designer/setting-panel/property-editor/field-radio/radio-defaultValue-editor.vue new file mode 100644 index 0000000..0f846a9 --- /dev/null +++ b/src/components/form-designer/setting-panel/property-editor/field-radio/radio-defaultValue-editor.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/form-designer/setting-panel/property-editor/field-select/select-defaultValue-editor.vue b/src/components/form-designer/setting-panel/property-editor/field-select/select-defaultValue-editor.vue new file mode 100644 index 0000000..56612ee --- /dev/null +++ b/src/components/form-designer/setting-panel/property-editor/field-select/select-defaultValue-editor.vue @@ -0,0 +1,18 @@ + + + + + diff --git a/src/components/form-designer/setting-panel/property-editor/propertyMixin.js b/src/components/form-designer/setting-panel/property-editor/propertyMixin.js index 2ef6a42..550e119 100644 --- a/src/components/form-designer/setting-panel/property-editor/propertyMixin.js +++ b/src/components/form-designer/setting-panel/property-editor/propertyMixin.js @@ -32,6 +32,14 @@ export default { onMultipleSelected(val) { if (val) { + //debugger + + // 清空已选项,否则console会报错!! + let foundRef = this.designer.formWidget.getWidgetRef(this.optionModel.name) + if (!!foundRef && !!foundRef.clearSelectedOptions) { + foundRef.clearSelectedOptions() + } + this.optionModel.defaultValue = [] //清空原默认值!! } else { if (!!this.optionModel.defaultValue && (this.optionModel.defaultValue.length > 0)) { diff --git a/src/components/form-designer/widget-panel/index.vue b/src/components/form-designer/widget-panel/index.vue index 4992d0a..5557973 100644 --- a/src/components/form-designer/widget-panel/index.vue +++ b/src/components/form-designer/widget-panel/index.vue @@ -61,8 +61,8 @@