| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
 | | <template> |  |   <div> |  |     <el-dialog |  |       v-bind="$attrs" |  |       :close-on-click-modal="false" |  |       :modal-append-to-body="false" |  |       v-on="$listeners" |  |       @open="onOpen" |  |       @close="onClose" |  |     > |  |       <el-row :gutter="0"> |  |         <el-form |  |           ref="elForm" |  |           :model="formData" |  |           :rules="rules" |  |           size="small" |  |           label-width="100px" |  |         > |  |           <el-col :span="24"> |  |             <el-form-item |  |               label="选项名" |  |               prop="label" |  |             > |  |               <el-input |  |                 v-model="formData.label" |  |                 placeholder="请输入选项名" |  |                 clearable |  |               /> |  |             </el-form-item> |  |           </el-col> |  |           <el-col :span="24"> |  |             <el-form-item |  |               label="选项值" |  |               prop="value" |  |             > |  |               <el-input |  |                 v-model="formData.value" |  |                 placeholder="请输入选项值" |  |                 clearable |  |               > |  |                 <el-select |  |                   slot="append" |  |                   v-model="dataType" |  |                   :style="{width: '100px'}" |  |                 > |  |                   <el-option |  |                     v-for="(item, index) in dataTypeOptions" |  |                     :key="index" |  |                     :label="item.label" |  |                     :value="item.value" |  |                     :disabled="item.disabled" |  |                   /> |  |                 </el-select> |  |               </el-input> |  |             </el-form-item> |  |           </el-col> |  |         </el-form> |  |       </el-row> |  |       <div slot="footer"> |  |         <el-button |  |           type="primary" |  |           @click="handleConfirm" |  |         > |  |           确定 |  |         </el-button> |  |         <el-button @click="close"> |  |           取消 |  |         </el-button> |  |       </div> |  |     </el-dialog> |  |   </div> |  | </template> |  | <script> |  | import { isNumberStr } from '@/utils/index' |  |   |  | export default { |  |   components: {}, |  |   inheritAttrs: false, |  |   props: [], |  |   data() { |  |     return { |  |       id: 100, |  |       formData: { |  |         label: undefined, |  |         value: undefined |  |       }, |  |       rules: { |  |         label: [ |  |           { |  |             required: true, |  |             message: '请输入选项名', |  |             trigger: 'blur' |  |           } |  |         ], |  |         value: [ |  |           { |  |             required: true, |  |             message: '请输入选项值', |  |             trigger: 'blur' |  |           } |  |         ] |  |       }, |  |       dataType: 'string', |  |       dataTypeOptions: [ |  |         { |  |           label: '字符串', |  |           value: 'string' |  |         }, |  |         { |  |           label: '数字', |  |           value: 'number' |  |         } |  |       ] |  |     } |  |   }, |  |   computed: {}, |  |   watch: { |  |     // eslint-disable-next-line func-names |  |     'formData.value': function (val) { |  |       this.dataType = isNumberStr(val) ? 'number' : 'string' |  |     } |  |   }, |  |   created() {}, |  |   mounted() {}, |  |   methods: { |  |     onOpen() { |  |       this.formData = { |  |         label: undefined, |  |         value: undefined |  |       } |  |     }, |  |     onClose() {}, |  |     close() { |  |       this.$emit('update:visible', false) |  |     }, |  |     handleConfirm() { |  |       this.$refs.elForm.validate(valid => { |  |         if (!valid) return |  |         if (this.dataType === 'number') { |  |           this.formData.value = parseFloat(this.formData.value) |  |         } |  |         this.formData.id = this.id++ |  |         this.$emit('commit', this.formData) |  |         this.close() |  |       }) |  |     } |  |   } |  | } |  | </script> | 
 |