@ddwl/ddwl-ui 1.1.4 → 1.1.5-beta.2

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,199 +1,199 @@
1
- <!-- eslint-disable vue/valid-v-for -->
2
- <template>
3
- <div class="search-item">
4
- <div>
5
- <span
6
- v-if="config.prefix"
7
- class="mr6"
8
- >{{ config.prefix }}</span>
9
- <el-radio-group
10
- v-if="config.component === 'el-radio-group'"
11
- v-model="value"
12
- :disabled="!!config.disabled"
13
- v-bind="config.props"
14
- v-on="config.listeners"
15
- @change="change"
16
- >
17
- <el-radio
18
- v-for="radio in config.options"
19
- :key="radio.value"
20
- :label="radio.value"
21
- :disabled="!!radio.disabled"
22
- >
23
- {{ radio.label }}
24
- </el-radio>
25
- </el-radio-group>
26
- <component
27
- :is="config.component"
28
- v-else
29
- :ref="config.prop"
30
- v-model.trim="value"
31
- :style="{
32
- width: config.width
33
- }"
34
- :clearable="clearable(config)"
35
- :maxlength="config.maxlength || maxlength(config)"
36
- :disabled="!!config.disabled"
37
- :placeholder="config.placeholder || placeholder(config)"
38
- v-bind="config.props"
39
- v-on="config.listeners"
40
- @change="change"
41
- >
42
- <template
43
- v-for="s in slots"
44
- :slot="s.slotName"
45
- >
46
- <form-item-render
47
- :scope="config"
48
- :render="s.render"
49
- />
50
- </template>
51
- <template v-if="config.component === 'el-checkbox-group'">
52
- <el-checkbox
53
- v-for="(checkbox, checkboxIndex) in config.options"
54
- :key="checkboxIndex"
55
- :label="checkbox.value"
56
- >
57
- {{ checkbox.label }}
58
- </el-checkbox>
59
- </template>
60
-
61
- <template v-if="config.component === 'el-select'">
62
- <el-option
63
- v-for="(option, optionIndex) in config.options"
64
- :key="optionIndex"
65
- :label="option.label"
66
- :value="option.value"
67
- :disabled="!!option.disabled"
68
- />
69
- </template>
70
- <span
71
- v-if="config.suffix"
72
- class="ml6"
73
- >{{ config.suffix }}</span>
74
- </component>
75
- </div>
76
- </div>
77
- </template>
78
-
79
- <script>
80
- import FormItemRender from '../render'
81
-
82
- export default {
83
- name: 'DFormItem',
84
- components: { FormItemRender },
85
- model: {
86
- prop: 'modelValue',
87
- event: 'change'
88
- },
89
- props: {
90
- config: {
91
- require: true,
92
- type: Object,
93
- default: () => {}
94
- },
95
- modelValue: {
96
- type: [Number, String, Boolean, Object, Array],
97
- default: ''
98
- }
99
- },
100
- data () {
101
- return {}
102
- },
103
- computed: {
104
- value: {
105
- get () {
106
- return this.modelValue
107
- },
108
- set (value) {
109
- this.$emit('change', value)
110
- }
111
- },
112
- slots () {
113
- return Object.entries(this.config.slots || []).map(([key, value]) => ({
114
- slotName: key,
115
- render: value
116
- }))
117
- },
118
- clearable () {
119
- return (config) => {
120
- // 优先取配置项clearable
121
- if (config.clearable !== undefined) {
122
- return !!config.clearable
123
- } else {
124
- return true
125
- }
126
- }
127
- },
128
- maxlength () {
129
- return (config) => {
130
- if (config.component === 'el-input') {
131
- if (config.props && config.props.type === 'textarea') {
132
- return 500
133
- } else {
134
- return 50
135
- }
136
- } else {
137
- return 99999
138
- }
139
- }
140
- },
141
- placeholder () {
142
- return ({ component, label }) => {
143
- // 默认给组件添加placeholder,可自定义
144
- if (component === 'el-input' || component === 'el-input-number') {
145
- return `请输入${label}`
146
- } else {
147
- return `请选择${label}`
148
- }
149
- }
150
- }
151
- },
152
- methods: {
153
- /**
154
- * @description: 普通选择器和级联选择器输出勾选Item节点数据
155
- * @param {*} value
156
- * @return {*} data: 输出结构和value数据结构一致,对应value中的节点data
157
- */
158
- change (value) {
159
- if (this.config.onChange) {
160
- let data = null
161
-
162
- // 处理级联选择器
163
- if (this.config.component === 'el-cascader') {
164
- this.$nextTick(() => {
165
- // el-cascader搜索勾选bug,需要nextTick后才能正常使用getCheckedNodes
166
- data = this.$refs[this.config.prop].getCheckedNodes()
167
- const emitPath = (this.config.props && this.config.props.props && this.config.props.props.emitPath !== undefined) ? this.config.props.props.emitPath : true
168
- const multiple = this.config.props && this.config.props.props && this.config.props.props.multiple
169
- if (emitPath) {
170
- if (multiple) {
171
- data = value.map(arr => data.find(node => arr[arr.length - 1] === node.value).pathNodes)
172
- } else {
173
- data = data[data.length - 1].pathNodes
174
- }
175
- } else {
176
- if (multiple) {
177
- data = value.map(item => data.find(node => item === node.value))
178
- } else {
179
- data = data[data.length - 1]
180
- }
181
- }
182
- this.config.onChange(value, data)
183
- })
184
- } else if (this.config.component === 'el-select') { // 处理下拉选择器
185
- data = this.config.options
186
- if (Array.isArray(value)) {
187
- data = data.filter(i => value.includes(i.value)) || []
188
- } else {
189
- data = data.find(i => value === i.value) || {}
190
- }
191
- this.config.onChange(value, data)
192
- } else {
193
- this.config.onChange(value)
194
- }
195
- }
196
- }
197
- }
198
- }
199
- </script>
1
+ <!-- eslint-disable vue/valid-v-for -->
2
+ <template>
3
+ <div class="search-item">
4
+ <div>
5
+ <span
6
+ v-if="config.prefix"
7
+ class="mr6"
8
+ >{{ config.prefix }}</span>
9
+ <el-radio-group
10
+ v-if="config.component === 'el-radio-group'"
11
+ v-model="value"
12
+ :disabled="!!config.disabled"
13
+ v-bind="config.props"
14
+ v-on="config.listeners"
15
+ @change="change"
16
+ >
17
+ <el-radio
18
+ v-for="radio in config.options"
19
+ :key="radio.value"
20
+ :label="radio.value"
21
+ :disabled="!!radio.disabled"
22
+ >
23
+ {{ radio.label }}
24
+ </el-radio>
25
+ </el-radio-group>
26
+ <component
27
+ :is="config.component"
28
+ v-else
29
+ :ref="config.prop"
30
+ v-model.trim="value"
31
+ :style="{
32
+ width: config.width
33
+ }"
34
+ :clearable="clearable(config)"
35
+ :maxlength="config.maxlength || maxlength(config)"
36
+ :disabled="!!config.disabled"
37
+ :placeholder="config.placeholder || placeholder(config)"
38
+ v-bind="config.props"
39
+ v-on="config.listeners"
40
+ @change="change"
41
+ >
42
+ <template
43
+ v-for="s in slots"
44
+ :slot="s.slotName"
45
+ >
46
+ <form-item-render
47
+ :scope="config"
48
+ :render="s.render"
49
+ />
50
+ </template>
51
+ <template v-if="config.component === 'el-checkbox-group'">
52
+ <el-checkbox
53
+ v-for="(checkbox, checkboxIndex) in config.options"
54
+ :key="checkboxIndex"
55
+ :label="checkbox.value"
56
+ >
57
+ {{ checkbox.label }}
58
+ </el-checkbox>
59
+ </template>
60
+
61
+ <template v-if="config.component === 'el-select'">
62
+ <el-option
63
+ v-for="(option, optionIndex) in config.options"
64
+ :key="optionIndex"
65
+ :label="option.label"
66
+ :value="option.value"
67
+ :disabled="!!option.disabled"
68
+ />
69
+ </template>
70
+ <span
71
+ v-if="config.suffix"
72
+ class="ml6"
73
+ >{{ config.suffix }}</span>
74
+ </component>
75
+ </div>
76
+ </div>
77
+ </template>
78
+
79
+ <script>
80
+ import FormItemRender from '../render'
81
+
82
+ export default {
83
+ name: 'DFormItem',
84
+ components: { FormItemRender },
85
+ model: {
86
+ prop: 'modelValue',
87
+ event: 'change'
88
+ },
89
+ props: {
90
+ config: {
91
+ require: true,
92
+ type: Object,
93
+ default: () => {}
94
+ },
95
+ modelValue: {
96
+ type: [Number, String, Boolean, Object, Array],
97
+ default: ''
98
+ }
99
+ },
100
+ data () {
101
+ return {}
102
+ },
103
+ computed: {
104
+ value: {
105
+ get () {
106
+ return this.modelValue
107
+ },
108
+ set (value) {
109
+ this.$emit('change', value)
110
+ }
111
+ },
112
+ slots () {
113
+ return Object.entries(this.config.slots || []).map(([key, value]) => ({
114
+ slotName: key,
115
+ render: value
116
+ }))
117
+ },
118
+ clearable () {
119
+ return (config) => {
120
+ // 优先取配置项clearable
121
+ if (config.clearable !== undefined) {
122
+ return !!config.clearable
123
+ } else {
124
+ return true
125
+ }
126
+ }
127
+ },
128
+ maxlength () {
129
+ return (config) => {
130
+ if (config.component === 'el-input') {
131
+ if (config.props && config.props.type === 'textarea') {
132
+ return 500
133
+ } else {
134
+ return 50
135
+ }
136
+ } else {
137
+ return 99999
138
+ }
139
+ }
140
+ },
141
+ placeholder () {
142
+ return ({ component, label }) => {
143
+ // 默认给组件添加placeholder,可自定义
144
+ if (component === 'el-input' || component === 'el-input-number') {
145
+ return `请输入${label}`
146
+ } else {
147
+ return `请选择${label}`
148
+ }
149
+ }
150
+ }
151
+ },
152
+ methods: {
153
+ /**
154
+ * @description: 普通选择器和级联选择器输出勾选Item节点数据
155
+ * @param {*} value
156
+ * @return {*} data: 输出结构和value数据结构一致,对应value中的节点data
157
+ */
158
+ change (value) {
159
+ if (this.config.onChange) {
160
+ let data = null
161
+
162
+ // 处理级联选择器
163
+ if (this.config.component === 'el-cascader') {
164
+ this.$nextTick(() => {
165
+ // el-cascader搜索勾选bug,需要nextTick后才能正常使用getCheckedNodes
166
+ data = this.$refs[this.config.prop].getCheckedNodes()
167
+ const emitPath = (this.config.props && this.config.props.props && this.config.props.props.emitPath !== undefined) ? this.config.props.props.emitPath : true
168
+ const multiple = this.config.props && this.config.props.props && this.config.props.props.multiple
169
+ if (emitPath) {
170
+ if (multiple) {
171
+ data = value.map(arr => data.find(node => arr[arr.length - 1] === node.value).pathNodes)
172
+ } else {
173
+ data = data[data.length - 1].pathNodes
174
+ }
175
+ } else {
176
+ if (multiple) {
177
+ data = value.map(item => data.find(node => item === node.value))
178
+ } else {
179
+ data = data[data.length - 1]
180
+ }
181
+ }
182
+ this.config.onChange(value, data)
183
+ })
184
+ } else if (this.config.component === 'el-select') { // 处理下拉选择器
185
+ data = this.config.options
186
+ if (Array.isArray(value)) {
187
+ data = data.filter(i => value.includes(i.value)) || []
188
+ } else {
189
+ data = data.find(i => value === i.value) || {}
190
+ }
191
+ this.config.onChange(value, data)
192
+ } else {
193
+ this.config.onChange(value)
194
+ }
195
+ }
196
+ }
197
+ }
198
+ }
199
+ </script>