el-form-renderer-vue3 1.1.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,196 @@
1
- ## 遗留问题 :带解决
1
+ ## 技术交流群 711368818
2
+
3
+ <img src="./src/assets/qq.jpg" width="200" />
4
+
5
+ ## 遗留问题 :待解决
2
6
 
3
7
  select 为 multiple 多选时 必须初始化空数组(在 elementplus v-model 初始化 updateValue 时 为空数组会触发校验)
4
8
 
9
+ ## Introduction
10
+
11
+ ### WHAT
12
+
13
+ form-renderer 基于元素 element-plus,但不限于元素 element-plus 组件。在完全继承 element-plus 元素的 form 属性的基础上,进行了扩展。一些非表单组件或自定义组件,因此,用户可以使用一段 json 来呈现完整的表单。
14
+
15
+ ### WHY
16
+
17
+ 在我们的日常开发中,有很多有表单的页面,通常表单结构相似,逻辑重复。el 表单呈现器没有复杂的逻辑。它只转换 JSON 来呈现表单项,节省了编写业务逻辑的时间和精力,并减少了重复代码。
18
+
19
+ ## Features
20
+
21
+ - 用 json 呈现表单
22
+ - 支持与自定义组件集成
23
+ - 支持 updateForm 方法批量更新表单数据
24
+ - 支持 setOptions 方法,动态更改选择选项
25
+ - 内容支持 inputFormat、outputFormat、trim 以处理组件的输入和输出值
26
+ - 支持 v-model
27
+
28
+ ## Links
29
+
30
+ - [$attrs 和 $listeners (vue2&&vue3)](https://blog.csdn.net/qq_63358859/article/details/133699476?spm=1001.2014.3001.5501)
31
+ - [vue2 与 vue3 函数式组件](https://blog.csdn.net/qq_63358859/article/details/133635120?spm=1001.2014.3001.5501)
32
+ - [vue 2 与 vue3 获取模版引用 (ref)的区别](https://blog.csdn.net/qq_63358859/article/details/133532229?spm=1001.2014.3001.5501)
33
+ - [vue2 与 vue3 v-model 的区别](https://blog.csdn.net/qq_63358859/article/details/133484380?spm=1001.2014.3001.5501)
34
+ - [vue2 版本](https://blog.csdn.net/qq_63358859/article/details/130442636?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169684271816800180612618%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=169684271816800180612618&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-7-130442636-null-null.nonecase&utm_term=render&spm=1018.2226.3001.4450)
35
+ - [中文文档](https://gitee.com/childe-jia/form-render/wikis/%E6%96%87%E6%A1%A3/%E4%BB%8B%E7%BB%8D)
36
+ - [element-plus table 的封装](https://gitee.com/childe-jia/table-vue3)
37
+
38
+ ## Quick Start
39
+
40
+ ```ts
41
+ pnpm i el-form-renderer-vue3
42
+ ```
43
+
44
+ ```ts
45
+ import elFormRenderer from "el-form-renderer-vue3";
46
+ app.use(elFormRenderer);
47
+ ```
48
+
49
+ ```ts
50
+ <template>
51
+ <el-form-renderer
52
+ label-width="100px"
53
+ :content="content"
54
+ v-model:FormData="FormData"
55
+ ref="form"
56
+ >
57
+ <el-button @click="resetForm">reset</el-button>
58
+ <el-button @click="setValue">设置名字为小明</el-button>
59
+ <pre>{{ FormData }}</pre>
60
+ </el-form-renderer>
61
+ </template>
62
+
63
+ <script setup>
64
+ import { reactive, ref } from "vue";
65
+
66
+ const form = ref();
67
+ let FormData = reactive({
68
+ name: "",
69
+ type: [],
70
+ startDate: "2019-01-01",
71
+ endDate: "2019-01-02",
72
+ region: [],
73
+ date: ["2019-01-01", "2019-01-02"],
74
+ });
75
+ const content = reactive([
76
+ {
77
+ type: "input",
78
+ id: "name",
79
+ label: "name",
80
+ attrs: { "data-name": "form1" },
81
+ el: {
82
+ size: "default",
83
+ placeholder: "test placeholder",
84
+ },
85
+ rules: [
86
+ { required: true, message: "miss name", trigger: "blur" },
87
+ { min: 3, max: 5, message: "length between 3 to 5", trigger: "blur" },
88
+ ],
89
+ },
90
+ {
91
+ type: "select",
92
+ id: "region",
93
+ label: "region",
94
+ options: [
95
+ {
96
+ label: "shanghai",
97
+ value: "shanghai",
98
+ },
99
+ {
100
+ label: "beijing",
101
+ value: "beijing",
102
+ },
103
+ {
104
+ label: "guangzhou",
105
+ value: "guangzhou",
106
+ },
107
+ ],
108
+ el: { filterable: true, multiple: true, multipleLimit: 2 },
109
+ rules: [{ required: true, message: "miss area", trigger: "change" }],
110
+ },
111
+ {
112
+ type: "date-picker",
113
+ id: "date",
114
+ label: "date",
115
+ el: {
116
+ type: "daterange",
117
+ valueFormat: "yyyy-MM-dd",
118
+ },
119
+ rules: [{ required: true, message: "miss date", trigger: "change" }],
120
+ inputFormat: (row) => {
121
+ if (row.startDate && row.endDate) {
122
+ return [row.startDate, row.endDate];
123
+ }
124
+ },
125
+ outputFormat: (val) => {
126
+ if (!val) {
127
+ return { startDate: "", endDate: "" };
128
+ }
129
+ return {
130
+ startDate: val[0],
131
+ endDate: val[1],
132
+ };
133
+ },
134
+ },
135
+ {
136
+ type: "switch",
137
+ id: "delivery",
138
+ label: "delivery",
139
+ },
140
+ {
141
+ type: "checkbox-group",
142
+ id: "type",
143
+ label: "type",
144
+ default: [],
145
+ options: [
146
+ {
147
+ label: "typeA",
148
+ },
149
+ {
150
+ label: "typeB",
151
+ },
152
+ {
153
+ label: "typeC",
154
+ },
155
+ ],
156
+ rules: [{ type: "array", required: true, message: "miss type", trigger: "change" }],
157
+ },
158
+ {
159
+ type: "radio-group",
160
+ id: "resource",
161
+ label: "resource",
162
+ options: [
163
+ {
164
+ label: "resourceA",
165
+ value: "A",
166
+ },
167
+ {
168
+ label: "resourceB",
169
+ value: "B",
170
+ },
171
+ ],
172
+ rules: [{ required: true, message: "miss resource", trigger: "change" }],
173
+ },
174
+ {
175
+ type: "input",
176
+ id: "desc",
177
+ label: "desc",
178
+ el: {
179
+ type: "textarea",
180
+ },
181
+ rules: [{ required: true, message: "miss desc", trigger: "blur" }],
182
+ },
183
+ ]);
184
+ const resetForm = () => {
185
+ form.value.methods.resetFields();
186
+ };
187
+ const setValue = () => {
188
+ FormData.name = "小明";
189
+ };
190
+ </script>
191
+
192
+ ```
193
+
5
194
  ## Props
6
195
 
7
196
  ```ts
@@ -218,3 +407,7 @@ support all [el-form's methods](https://element.eleme.io/#/zh-CN/component/form#
218
407
  | -------- | ------------------------------------------- |
219
408
  | default | insert at bottom |
220
409
  | id:hello | insert before form-item whose id is 'hello' |
410
+
411
+ ## Inspiration
412
+
413
+ thanks to [el-form-renderer](https://github.com/femessage/el-form-renderer/)