lw-cdp-ui 1.0.19 → 1.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +5 -5
  2. package/dist/components/lwForm/index.vue +312 -312
  3. package/dist/components/lwIconSelect/iconSelect.js +288 -288
  4. package/dist/components/lwIconSelect/index.vue +142 -142
  5. package/dist/components/lwLayout/components/NavMenu.vue +36 -36
  6. package/dist/components/lwLayout/components/aside.vue +291 -295
  7. package/dist/components/lwLayout/components/bu.vue +72 -70
  8. package/dist/components/lwLayout/components/iframeView.vue +57 -57
  9. package/dist/components/lwLayout/components/lang.vue +76 -76
  10. package/dist/components/lwLayout/components/setting.vue +80 -80
  11. package/dist/components/lwLayout/components/sideM.vue +137 -136
  12. package/dist/components/lwLayout/components/tags.vue +329 -329
  13. package/dist/components/lwLayout/components/topbar.vue +70 -70
  14. package/dist/components/lwLayout/components/userbar.vue +210 -209
  15. package/dist/components/lwLayout/index.vue +399 -398
  16. package/dist/components/lwLogin/index.vue +446 -383
  17. package/dist/components/lwSearch/date/date.vue +110 -110
  18. package/dist/components/lwSearch/dateRange/dateRange.vue +110 -110
  19. package/dist/components/lwSearch/dates/dates.vue +366 -366
  20. package/dist/components/lwSearch/index.vue +636 -636
  21. package/dist/components/lwSearch/input/input.vue +54 -54
  22. package/dist/components/lwSearch/locale/en-us.js +10 -10
  23. package/dist/components/lwSearch/locale/zh-cn.js +10 -10
  24. package/dist/components/lwSearch/select/select.vue +57 -57
  25. package/dist/components/lwSvgIcon/index.vue +28 -28
  26. package/dist/components/lwTable/index.js +425 -425
  27. package/dist/components/lwTable/index.scss +229 -229
  28. package/dist/components/lwTable/index.vue +225 -226
  29. package/dist/components/lwTable/locale/en-US.js +26 -26
  30. package/dist/components/lwTable/locale/zh-CN.js +26 -26
  31. package/dist/components/lwTable/useFullscreen.js +73 -73
  32. package/dist/components/lwTableSelect/index.vue +254 -254
  33. package/dist/components/lwTableSelect/tableSelect.js +23 -23
  34. package/dist/components/lwUpload/index.vue +365 -365
  35. package/dist/en-US-YCjgxjEt.js.map +1 -1
  36. package/dist/en-us-CziFtIQi.js.map +1 -1
  37. package/dist/lw-cdp-ui.esm.js +1484 -1459
  38. package/dist/lw-cdp-ui.esm.js.map +1 -1
  39. package/dist/lw-cdp-ui.umd.js +9 -9
  40. package/dist/lw-cdp-ui.umd.js.map +1 -1
  41. package/dist/style.css +1 -1
  42. package/dist/zh-CN-BdDNsX4e.js.map +1 -1
  43. package/dist/zh-cn-DJpQp_O7.js.map +1 -1
  44. package/package.json +45 -45
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
- # Vue 3 + Vite
2
-
3
- This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
-
5
- Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
1
+ # Vue 3 + Vite
2
+
3
+ This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
+
5
+ Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
@@ -1,312 +1,312 @@
1
- <template>
2
- <el-skeleton v-if="renderLoading || Object.keys(form).length==0"
3
- animated />
4
-
5
- <el-form v-else
6
- ref="form"
7
- :model="form"
8
- :label-width="config.labelWidth"
9
- :label-position="config.labelPosition"
10
- v-loading="loading"
11
- element-loading-text="Loading...">
12
- <el-row :gutter="15">
13
- <template v-for="(item, index) in config.formItems"
14
- :key="index">
15
- <el-col :span="item.span || 24"
16
- v-if="!hideHandle(item)">
17
- <el-form-item :prop="item.name"
18
- :rules="rulesHandle(item)">
19
- <template #label>
20
- {{item.label}}
21
- <el-tooltip v-if="item.tips"
22
- :content="item.tips">
23
- <el-icon><el-icon-question-filled /></el-icon>
24
- </el-tooltip>
25
- </template>
26
- <!-- input -->
27
- <template v-if="item.component=='input'">
28
- <el-input v-model="form[item.name]"
29
- :placeholder="item.options.placeholder"
30
- clearable
31
- :type="item.options.type"
32
- :disabled="item.options.disabled"
33
- :maxlength="item.options.maxlength"
34
- show-word-limit></el-input>
35
- </template>
36
- <!-- upload -->
37
- <template v-else-if="item.component=='upload'">
38
- <el-col v-for="(_item, _index) in item.options.items"
39
- :key="_index">
40
- <el-form-item :prop="_item.name">
41
- <lw-upload v-model="form[_item.name]"
42
- :title="_item.label"></lw-upload>
43
- </el-form-item>
44
- </el-col>
45
- </template>
46
- <!-- checkbox -->
47
- <template v-else-if="item.component=='checkbox'">
48
- <template v-if="item.name">
49
- <el-checkbox v-model="form[item.name][_item.name]"
50
- :label="_item.label"
51
- v-for="(_item, _index) in item.options.items"
52
- :key="_index"></el-checkbox>
53
- </template>
54
- <template v-else>
55
- <el-checkbox v-model="form[_item.name]"
56
- :label="_item.label"
57
- v-for="(_item, _index) in item.options.items"
58
- :key="_index"></el-checkbox>
59
- </template>
60
- </template>
61
- <!-- checkboxGroup -->
62
- <template v-else-if="item.component=='checkboxGroup'">
63
- <el-checkbox-group v-model="form[item.name]">
64
- <el-checkbox v-for="_item in item.options.items"
65
- :key="_item.value"
66
- :label="_item.value">{{_item.label}}</el-checkbox>
67
- </el-checkbox-group>
68
- </template>
69
- <!-- upload -->
70
- <template v-else-if="item.component=='upload'">
71
- <el-col v-for="(_item, _index) in item.options.items"
72
- :key="_index">
73
- <el-form-item :prop="_item.name">
74
- <sc-upload v-model="form[_item.name]"
75
- :title="_item.label"></sc-upload>
76
- </el-form-item>
77
- </el-col>
78
- </template>
79
- <!-- switch -->
80
- <template v-else-if="item.component=='switch'">
81
- <el-switch v-model="form[item.name]" />
82
- </template>
83
- <!-- select -->
84
- <template v-else-if="item.component=='select'">
85
- <el-select v-model="form[item.name]"
86
- :multiple="item.options.multiple"
87
- :placeholder="item.options.placeholder"
88
- clearable
89
- filterable
90
- style="width: 100%;">
91
- <el-option v-for="option in item.options.items"
92
- :key="option.value"
93
- :label="option.label"
94
- :value="option.value"></el-option>
95
- </el-select>
96
- </template>
97
- <!-- cascader -->
98
- <template v-else-if="item.component=='cascader'">
99
- <el-cascader v-model="form[item.name]"
100
- :options="item.options.items"
101
- clearable></el-cascader>
102
- </template>
103
- <!-- date -->
104
- <template v-else-if="item.component=='date'">
105
- <el-date-picker v-model="form[item.name]"
106
- style="width: 100%;"
107
- :type="item.options.type"
108
- :shortcuts="item.options.shortcuts"
109
- :default-time="item.options.defaultTime"
110
- :value-format="item.options.valueFormat"
111
- :placeholder="item.options.placeholder || '请选择'"></el-date-picker>
112
- </template>
113
- <!-- number -->
114
- <template v-else-if="item.component=='number'">
115
- <el-input-number v-model="form[item.name]"
116
- controls-position="right"></el-input-number>
117
- </template>
118
- <!-- radio -->
119
- <template v-else-if="item.component=='radio'">
120
- <el-radio-group v-model="form[item.name]">
121
- <el-radio v-for="_item in item.options.items"
122
- :key="_item.value"
123
- :label="_item.value">{{_item.label}}</el-radio>
124
- </el-radio-group>
125
- </template>
126
- <!-- color -->
127
- <template v-else-if="item.component=='color'">
128
- <el-color-picker v-model="form[item.name]" />
129
- </template>
130
- <!-- rate -->
131
- <template v-else-if="item.component=='rate'">
132
- <el-rate style="margin-top: 6px;"
133
- v-model="form[item.name]"></el-rate>
134
- </template>
135
- <!-- slider -->
136
- <template v-else-if="item.component=='slider'">
137
- <el-slider v-model="form[item.name]"
138
- :marks="item.options.marks"></el-slider>
139
- </template>
140
- <!-- 没有组件是component值 就是插槽名称 -->
141
- <template v-else>
142
- <slot :name="item.component">
143
- <el-tag type="danger">[{{item.component}}]
144
- 没有这个默认组件也未自定义插槽内容</el-tag>
145
- </slot>
146
- </template>
147
- <div v-if="item.message"
148
- class="el-form-item-msg">{{item.message}}</div>
149
- </el-form-item>
150
- </el-col>
151
- </template>
152
- <el-col :span="24">
153
- <el-form-item>
154
- <slot>
155
- <el-button type="primary"
156
- @click="submit">提交</el-button>
157
- </slot>
158
- </el-form-item>
159
- </el-col>
160
- </el-row>
161
- </el-form>
162
- </template>
163
-
164
- <script>
165
- import lwUpload from '../lwUpload'
166
- export default {
167
- components: {
168
- lwUpload
169
- },
170
- props: {
171
- modelValue: { type: Object, default: () => { } },
172
- config: { type: Object, default: () => { } },
173
- loading: { type: Boolean, default: false },
174
- },
175
- data() {
176
- return {
177
- form: {},
178
- renderLoading: false
179
- }
180
- },
181
- watch: {
182
- modelValue() {
183
- if (this.hasConfig) {
184
- this.deepMerge(this.form, this.modelValue)
185
- }
186
- },
187
- config() {
188
- this.render()
189
- },
190
- form: {
191
- handler(val) {
192
- this.$emit("update:modelValue", val)
193
- },
194
- deep: true
195
- }
196
- },
197
- computed: {
198
- hasConfig() {
199
- return Object.keys(this.config).length > 0
200
- },
201
- hasValue() {
202
- return Object.keys(this.modelValue).length > 0
203
- }
204
- },
205
- created() {
206
-
207
- },
208
- mounted() {
209
- if (this.hasConfig) {
210
- this.render()
211
- }
212
- },
213
- methods: {
214
- //构建form对象
215
- render() {
216
- this.config.formItems.forEach((item) => {
217
- if (item.component == 'checkbox') {
218
- if (item.name) {
219
- const value = {}
220
- item.options.items.forEach((option) => {
221
- value[option.name] = option.value
222
- })
223
- this.form[item.name] = value
224
- } else {
225
- item.options.items.forEach((option) => {
226
- this.form[option.name] = option.value
227
- })
228
- }
229
- } else if (item.component == 'upload') {
230
- if (item.name) {
231
- const value = {}
232
- item.options.items.forEach((option) => {
233
- value[option.name] = option.value
234
- })
235
- this.form[item.name] = value
236
- } else {
237
- item.options.items.forEach((option) => {
238
- this.form[option.name] = option.value
239
- })
240
- }
241
- } else {
242
- this.form[item.name] = item.value
243
- }
244
- })
245
- if (this.hasValue) {
246
- this.form = this.deepMerge(this.form, this.modelValue)
247
- }
248
- this.getData()
249
- },
250
- //处理远程选项数据
251
- getData() {
252
- this.renderLoading = true
253
- var remoteData = []
254
- this.config.formItems.forEach((item) => {
255
- if (item.options && item.options.remote) {
256
- var req = this.$http.get(item.options.remote.api, item.options.remote.data).then(res => {
257
- item.options.items = res.data
258
- })
259
- remoteData.push(req)
260
- }
261
- })
262
- Promise.all(remoteData).then(() => {
263
- this.renderLoading = false
264
- })
265
- },
266
- //合并深结构对象
267
- deepMerge(obj1, obj2) {
268
- let key;
269
- for (key in obj2) {
270
- obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" && (obj2[key] && obj2[key].toString() === "[object Object]") ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key])
271
- }
272
- return obj1
273
- //return JSON.parse(JSON.stringify(obj1))
274
- },
275
- //处理动态隐藏
276
- hideHandle(item) {
277
-
278
- if (typeof item.hideHandle === 'string') {
279
- const exp = eval(item.hideHandle.replace(/\$/g, "this.form"))
280
- return exp
281
- } else if (typeof item.hideHandle === 'boolean') {
282
- return item.hideHandle
283
- }
284
- return false
285
- },
286
- //处理动态必填
287
- rulesHandle(item) {
288
- if (item.requiredHandle) {
289
- const exp = eval(item.requiredHandle.replace(/\$/g, "this.form"))
290
- var requiredRule = item.rules.find(t => 'required' in t)
291
- requiredRule.required = exp
292
- }
293
- return item.rules
294
- },
295
- //数据验证
296
- validate(valid, obj) {
297
- return this.$refs.form.validate(valid, obj)
298
- },
299
- scrollToField(prop) {
300
- return this.$refs.form.scrollToField(prop)
301
- },
302
- resetFields() {
303
- return this.$refs.form.resetFields()
304
- },
305
- //提交
306
- submit() {
307
- this.$emit("submit", this.form)
308
- }
309
- }
310
- }
311
- </script>
312
-
1
+ <template>
2
+ <el-skeleton v-if="renderLoading || Object.keys(form).length==0"
3
+ animated />
4
+
5
+ <el-form v-else
6
+ ref="form"
7
+ :model="form"
8
+ :label-width="config.labelWidth"
9
+ :label-position="config.labelPosition"
10
+ v-loading="loading"
11
+ element-loading-text="Loading...">
12
+ <el-row :gutter="15">
13
+ <template v-for="(item, index) in config.formItems"
14
+ :key="index">
15
+ <el-col :span="item.span || 24"
16
+ v-if="!hideHandle(item)">
17
+ <el-form-item :prop="item.name"
18
+ :rules="rulesHandle(item)">
19
+ <template #label>
20
+ {{item.label}}
21
+ <el-tooltip v-if="item.tips"
22
+ :content="item.tips">
23
+ <el-icon><el-icon-question-filled /></el-icon>
24
+ </el-tooltip>
25
+ </template>
26
+ <!-- input -->
27
+ <template v-if="item.component=='input'">
28
+ <el-input v-model="form[item.name]"
29
+ :placeholder="item.options.placeholder"
30
+ clearable
31
+ :type="item.options.type"
32
+ :disabled="item.options.disabled"
33
+ :maxlength="item.options.maxlength"
34
+ show-word-limit></el-input>
35
+ </template>
36
+ <!-- upload -->
37
+ <template v-else-if="item.component=='upload'">
38
+ <el-col v-for="(_item, _index) in item.options.items"
39
+ :key="_index">
40
+ <el-form-item :prop="_item.name">
41
+ <lw-upload v-model="form[_item.name]"
42
+ :title="_item.label"></lw-upload>
43
+ </el-form-item>
44
+ </el-col>
45
+ </template>
46
+ <!-- checkbox -->
47
+ <template v-else-if="item.component=='checkbox'">
48
+ <template v-if="item.name">
49
+ <el-checkbox v-model="form[item.name][_item.name]"
50
+ :label="_item.label"
51
+ v-for="(_item, _index) in item.options.items"
52
+ :key="_index"></el-checkbox>
53
+ </template>
54
+ <template v-else>
55
+ <el-checkbox v-model="form[_item.name]"
56
+ :label="_item.label"
57
+ v-for="(_item, _index) in item.options.items"
58
+ :key="_index"></el-checkbox>
59
+ </template>
60
+ </template>
61
+ <!-- checkboxGroup -->
62
+ <template v-else-if="item.component=='checkboxGroup'">
63
+ <el-checkbox-group v-model="form[item.name]">
64
+ <el-checkbox v-for="_item in item.options.items"
65
+ :key="_item.value"
66
+ :label="_item.value">{{_item.label}}</el-checkbox>
67
+ </el-checkbox-group>
68
+ </template>
69
+ <!-- upload -->
70
+ <template v-else-if="item.component=='upload'">
71
+ <el-col v-for="(_item, _index) in item.options.items"
72
+ :key="_index">
73
+ <el-form-item :prop="_item.name">
74
+ <sc-upload v-model="form[_item.name]"
75
+ :title="_item.label"></sc-upload>
76
+ </el-form-item>
77
+ </el-col>
78
+ </template>
79
+ <!-- switch -->
80
+ <template v-else-if="item.component=='switch'">
81
+ <el-switch v-model="form[item.name]" />
82
+ </template>
83
+ <!-- select -->
84
+ <template v-else-if="item.component=='select'">
85
+ <el-select v-model="form[item.name]"
86
+ :multiple="item.options.multiple"
87
+ :placeholder="item.options.placeholder"
88
+ clearable
89
+ filterable
90
+ style="width: 100%;">
91
+ <el-option v-for="option in item.options.items"
92
+ :key="option.value"
93
+ :label="option.label"
94
+ :value="option.value"></el-option>
95
+ </el-select>
96
+ </template>
97
+ <!-- cascader -->
98
+ <template v-else-if="item.component=='cascader'">
99
+ <el-cascader v-model="form[item.name]"
100
+ :options="item.options.items"
101
+ clearable></el-cascader>
102
+ </template>
103
+ <!-- date -->
104
+ <template v-else-if="item.component=='date'">
105
+ <el-date-picker v-model="form[item.name]"
106
+ style="width: 100%;"
107
+ :type="item.options.type"
108
+ :shortcuts="item.options.shortcuts"
109
+ :default-time="item.options.defaultTime"
110
+ :value-format="item.options.valueFormat"
111
+ :placeholder="item.options.placeholder || '请选择'"></el-date-picker>
112
+ </template>
113
+ <!-- number -->
114
+ <template v-else-if="item.component=='number'">
115
+ <el-input-number v-model="form[item.name]"
116
+ controls-position="right"></el-input-number>
117
+ </template>
118
+ <!-- radio -->
119
+ <template v-else-if="item.component=='radio'">
120
+ <el-radio-group v-model="form[item.name]">
121
+ <el-radio v-for="_item in item.options.items"
122
+ :key="_item.value"
123
+ :label="_item.value">{{_item.label}}</el-radio>
124
+ </el-radio-group>
125
+ </template>
126
+ <!-- color -->
127
+ <template v-else-if="item.component=='color'">
128
+ <el-color-picker v-model="form[item.name]" />
129
+ </template>
130
+ <!-- rate -->
131
+ <template v-else-if="item.component=='rate'">
132
+ <el-rate style="margin-top: 6px;"
133
+ v-model="form[item.name]"></el-rate>
134
+ </template>
135
+ <!-- slider -->
136
+ <template v-else-if="item.component=='slider'">
137
+ <el-slider v-model="form[item.name]"
138
+ :marks="item.options.marks"></el-slider>
139
+ </template>
140
+ <!-- 没有组件是component值 就是插槽名称 -->
141
+ <template v-else>
142
+ <slot :name="item.component">
143
+ <el-tag type="danger">[{{item.component}}]
144
+ 没有这个默认组件也未自定义插槽内容</el-tag>
145
+ </slot>
146
+ </template>
147
+ <div v-if="item.message"
148
+ class="el-form-item-msg">{{item.message}}</div>
149
+ </el-form-item>
150
+ </el-col>
151
+ </template>
152
+ <el-col :span="24">
153
+ <el-form-item>
154
+ <slot>
155
+ <el-button type="primary"
156
+ @click="submit">提交</el-button>
157
+ </slot>
158
+ </el-form-item>
159
+ </el-col>
160
+ </el-row>
161
+ </el-form>
162
+ </template>
163
+
164
+ <script>
165
+ import lwUpload from '../lwUpload'
166
+ export default {
167
+ components: {
168
+ lwUpload
169
+ },
170
+ props: {
171
+ modelValue: { type: Object, default: () => { } },
172
+ config: { type: Object, default: () => { } },
173
+ loading: { type: Boolean, default: false },
174
+ },
175
+ data() {
176
+ return {
177
+ form: {},
178
+ renderLoading: false
179
+ }
180
+ },
181
+ watch: {
182
+ modelValue() {
183
+ if (this.hasConfig) {
184
+ this.deepMerge(this.form, this.modelValue)
185
+ }
186
+ },
187
+ config() {
188
+ this.render()
189
+ },
190
+ form: {
191
+ handler(val) {
192
+ this.$emit("update:modelValue", val)
193
+ },
194
+ deep: true
195
+ }
196
+ },
197
+ computed: {
198
+ hasConfig() {
199
+ return Object.keys(this.config).length > 0
200
+ },
201
+ hasValue() {
202
+ return Object.keys(this.modelValue).length > 0
203
+ }
204
+ },
205
+ created() {
206
+
207
+ },
208
+ mounted() {
209
+ if (this.hasConfig) {
210
+ this.render()
211
+ }
212
+ },
213
+ methods: {
214
+ //构建form对象
215
+ render() {
216
+ this.config.formItems.forEach((item) => {
217
+ if (item.component == 'checkbox') {
218
+ if (item.name) {
219
+ const value = {}
220
+ item.options.items.forEach((option) => {
221
+ value[option.name] = option.value
222
+ })
223
+ this.form[item.name] = value
224
+ } else {
225
+ item.options.items.forEach((option) => {
226
+ this.form[option.name] = option.value
227
+ })
228
+ }
229
+ } else if (item.component == 'upload') {
230
+ if (item.name) {
231
+ const value = {}
232
+ item.options.items.forEach((option) => {
233
+ value[option.name] = option.value
234
+ })
235
+ this.form[item.name] = value
236
+ } else {
237
+ item.options.items.forEach((option) => {
238
+ this.form[option.name] = option.value
239
+ })
240
+ }
241
+ } else {
242
+ this.form[item.name] = item.value
243
+ }
244
+ })
245
+ if (this.hasValue) {
246
+ this.form = this.deepMerge(this.form, this.modelValue)
247
+ }
248
+ this.getData()
249
+ },
250
+ //处理远程选项数据
251
+ getData() {
252
+ this.renderLoading = true
253
+ var remoteData = []
254
+ this.config.formItems.forEach((item) => {
255
+ if (item.options && item.options.remote) {
256
+ var req = this.$http.get(item.options.remote.api, item.options.remote.data).then(res => {
257
+ item.options.items = res.data
258
+ })
259
+ remoteData.push(req)
260
+ }
261
+ })
262
+ Promise.all(remoteData).then(() => {
263
+ this.renderLoading = false
264
+ })
265
+ },
266
+ //合并深结构对象
267
+ deepMerge(obj1, obj2) {
268
+ let key;
269
+ for (key in obj2) {
270
+ obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" && (obj2[key] && obj2[key].toString() === "[object Object]") ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key])
271
+ }
272
+ return obj1
273
+ //return JSON.parse(JSON.stringify(obj1))
274
+ },
275
+ //处理动态隐藏
276
+ hideHandle(item) {
277
+
278
+ if (typeof item.hideHandle === 'string') {
279
+ const exp = eval(item.hideHandle.replace(/\$/g, "this.form"))
280
+ return exp
281
+ } else if (typeof item.hideHandle === 'boolean') {
282
+ return item.hideHandle
283
+ }
284
+ return false
285
+ },
286
+ //处理动态必填
287
+ rulesHandle(item) {
288
+ if (item.requiredHandle) {
289
+ const exp = eval(item.requiredHandle.replace(/\$/g, "this.form"))
290
+ var requiredRule = item.rules.find(t => 'required' in t)
291
+ requiredRule.required = exp
292
+ }
293
+ return item.rules
294
+ },
295
+ //数据验证
296
+ validate(valid, obj) {
297
+ return this.$refs.form.validate(valid, obj)
298
+ },
299
+ scrollToField(prop) {
300
+ return this.$refs.form.scrollToField(prop)
301
+ },
302
+ resetFields() {
303
+ return this.$refs.form.resetFields()
304
+ },
305
+ //提交
306
+ submit() {
307
+ this.$emit("submit", this.form)
308
+ }
309
+ }
310
+ }
311
+ </script>
312
+