|
1 | 1 | <template> |
2 | 2 | <Form |
3 | 3 | ref="formValidate" |
4 | | - :style="{width:width>0?(width+'px'):'100%'}" |
| 4 | + :style="{ width: width > 0 ? width + 'px' : '100%' }" |
5 | 5 | :model="_formFields" |
6 | 6 | :label-width="labelWidth" |
7 | 7 | > |
8 | 8 | <!-- :rules="ruleValidate" --> |
9 | 9 | <slot name="header"></slot> |
10 | | - <Row class="line-row" v-for="(row,findex) in formRules" :key="findex"> |
11 | | - <Col :span="(item.colSize?item.colSize*2:24/span)" v-for="(item,index) in row" :key="index"> |
| 10 | + <Row class="line-row" v-for="(row, findex) in formRules" :key="findex"> |
| 11 | + <Col |
| 12 | + :span="item.colSize ? item.colSize * 2 : 24 / span" |
| 13 | + v-for="(item, index) in row" |
| 14 | + :key="index" |
| 15 | + > |
12 | 16 | <!-- 2020.06.18增加render渲染自定义内容 --> |
13 | | - <form-expand v-if="item.render&&typeof item.render=='function'" :render="item.render"></form-expand> |
| 17 | + <form-expand |
| 18 | + v-if="item.render && typeof item.render == 'function'" |
| 19 | + :render="item.render" |
| 20 | + ></form-expand> |
14 | 21 | <FormItem |
15 | 22 | v-else |
16 | | - :rules="getRule(item,_formFields)" |
17 | | - :label="item.title?(item.title+':'):''" |
| 23 | + :rules="getRule(item, _formFields)" |
| 24 | + :label="item.title ? item.title + ':' : ''" |
18 | 25 | :prop="item.field" |
19 | 26 | > |
20 | | - <template v-if="isReadonlyImgFile(item,_formFields)"> |
21 | | - <div v-if="item.type=='img'||item.columnType=='img'" class="form-imgs"> |
| 27 | + <template v-if="isReadonlyImgFile(item, _formFields)"> |
| 28 | + <div |
| 29 | + v-if="item.type == 'img' || item.columnType == 'img'" |
| 30 | + class="form-imgs" |
| 31 | + > |
22 | 32 | <div |
23 | 33 | class="img-item" |
24 | | - v-for="(img,imgIndex) in _formFields[item.field]" |
| 34 | + v-for="(img, imgIndex) in _formFields[item.field]" |
25 | 35 | :key="imgIndex" |
26 | 36 | > |
27 | | - <img :src="getSrc(img.path)" :onerror="errorImg" @click="previewImg(img.path)" /> |
| 37 | + <img |
| 38 | + :src="getSrc(img.path)" |
| 39 | + :onerror="errorImg" |
| 40 | + @click="previewImg(img.path)" |
| 41 | + /> |
28 | 42 | </div> |
29 | 43 | </div> |
30 | 44 | <template v-else> |
31 | 45 | <div |
32 | 46 | class="form-file-list" |
33 | | - v-for="(file,fileIndex) in _formFields[item.field]" |
| 47 | + v-for="(file, fileIndex) in _formFields[item.field]" |
34 | 48 | :key="fileIndex" |
35 | 49 | > |
36 | | - <a @click="dowloadFile(_formFields[item.field][fileIndex])">{{file.name}}</a> |
| 50 | + <a @click="dowloadFile(_formFields[item.field][fileIndex])">{{ |
| 51 | + file.name |
| 52 | + }}</a> |
37 | 53 | </div> |
38 | 54 | </template> |
39 | 55 | </template> |
40 | 56 | <label |
41 | | - v-else-if="item.disabled||item.readonly" |
| 57 | + v-else-if="item.disabled || item.readonly" |
42 | 58 | class="readonly-input" |
43 | | - >{{getText(_formFields,item)}}</label> |
44 | | - <div v-else :class="{'form-item-extra':item.extra}"> |
| 59 | + >{{ getText(_formFields, item) }}</label |
| 60 | + > |
| 61 | + <div v-else :class="{ 'form-item-extra': item.extra }"> |
45 | 62 | <!--下拉框绑定时如果key为数字,请将key+''转换为字符串--> |
46 | 63 | <template |
47 | | - v-if="item.type=='select'||item.type=='selectList'||item.type=='drop'||item.type=='dropList'" |
| 64 | + v-if=" |
| 65 | + item.type == 'select' || |
| 66 | + item.type == 'selectList' || |
| 67 | + item.type == 'drop' || |
| 68 | + item.type == 'dropList' |
| 69 | + " |
48 | 70 | > |
49 | 71 | <!--select绑定默认值时,如果设置了默认值,数据源也有数据,但没绑定上,问题在于key与默认值类型不一致,如:默认值是字符串,数据源的key是数字,类型不至会导致绑定失败--> |
50 | 72 | <template> |
51 | 73 | <!-- {{ item.remote||item.url?"1":"0"}} --> |
52 | 74 | <!-- 远程搜索 --> |
53 | 75 | <!-- 从后台字典搜索remote --> |
54 | 76 | <Select |
55 | | - v-if="item.remote||item.url" |
| 77 | + v-if="item.remote || item.url" |
56 | 78 | :transfer="true" |
57 | 79 | v-model="_formFields[item.field]" |
58 | 80 | filterable |
59 | 81 | remote |
60 | | - @on-clear="()=>{onClear(item,_formFields)}" |
61 | | - :remote-method="(val)=>{remoteSearch(item,_formFields,val)}" |
| 82 | + @on-clear=" |
| 83 | + () => { |
| 84 | + onClear(item, _formFields); |
| 85 | + } |
| 86 | + " |
| 87 | + :remote-method=" |
| 88 | + (val) => { |
| 89 | + remoteSearch(item, _formFields, val); |
| 90 | + } |
| 91 | + " |
62 | 92 | :loading="item.loading" |
63 | | - :placeholder="item.placeholder?item.placeholder:( '请选择'+item.title)" |
64 | | - @on-change="onRemoteChange(item,_formFields[item.field])" |
| 93 | + :placeholder=" |
| 94 | + item.placeholder ? item.placeholder : '请选择' + item.title |
| 95 | + " |
| 96 | + @on-change="onRemoteChange(item, _formFields[item.field])" |
65 | 97 | clearable |
66 | 98 | > |
67 | 99 | <Option |
68 | | - v-for="(kv,kvIndex) in getData(item)" |
| 100 | + v-for="(kv, kvIndex) in getData(item)" |
69 | 101 | :key="kvIndex" |
70 | 102 | :value="kv.key" |
71 | | - >{{kv.value}}</Option> |
| 103 | + >{{ kv.value }}</Option |
| 104 | + > |
72 | 105 | </Select> |
73 | 106 | <Select |
74 | 107 | v-else |
75 | 108 | :transfer="true" |
76 | 109 | v-model="_formFields[item.field]" |
77 | | - :multiple="(item.type=='select'||item.type=='drop')?false:true" |
78 | | - :filterable="(item.filter||item.data.length>10)?true:false" |
79 | | - :placeholder="item.placeholder?item.placeholder:( '请选择'+item.title)" |
80 | | - @on-change="onChange(item,_formFields[item.field])" |
| 110 | + :multiple=" |
| 111 | + item.type == 'select' || item.type == 'drop' ? false : true |
| 112 | + " |
| 113 | + :filterable=" |
| 114 | + item.filter || item.data.length > 10 ? true : false |
| 115 | + " |
| 116 | + :placeholder=" |
| 117 | + item.placeholder ? item.placeholder : '请选择' + item.title |
| 118 | + " |
| 119 | + @on-change="onChange(item, _formFields[item.field])" |
81 | 120 | clearable |
82 | 121 | > |
83 | 122 | <Option |
84 | | - v-for="(kv,kvIndex) in item.data" |
| 123 | + v-for="(kv, kvIndex) in item.data" |
85 | 124 | :key="kvIndex" |
86 | 125 | :value="kv.key" |
87 | | - >{{kv.value}}</Option> |
| 126 | + >{{ kv.value }}</Option |
| 127 | + > |
88 | 128 | </Select> |
89 | 129 | </template> |
90 | 130 | </template> |
91 | 131 | <i-switch |
92 | | - v-else-if="item.type=='switch'" |
93 | | - :true-value="typeof _formFields[item.field]=='boolean' ? true:1" |
94 | | - :false-value="typeof _formFields[item.field]=='boolean' ? false:0" |
| 132 | + v-else-if="item.type == 'switch'" |
| 133 | + :true-value=" |
| 134 | + typeof _formFields[item.field] == 'boolean' ? true : 1 |
| 135 | + " |
| 136 | + :false-value=" |
| 137 | + typeof _formFields[item.field] == 'boolean' ? false : 0 |
| 138 | + " |
95 | 139 | v-model="_formFields[item.field]" |
96 | 140 | > |
97 | 141 | <span slot="open">是</span> |
98 | 142 | <span slot="close">否</span> |
99 | 143 | </i-switch> |
100 | | - <Row v-else-if="item.type=='date'||item.type=='datetime'||item.columnType=='datetime'"> |
| 144 | + <Row |
| 145 | + v-else-if=" |
| 146 | + item.type == 'date' || |
| 147 | + item.type == 'datetime' || |
| 148 | + item.columnType == 'datetime' |
| 149 | + " |
| 150 | + > |
101 | 151 | <Col span="24"> |
102 | 152 | <FormItem :prop="item.field"> |
103 | 153 | <DatePicker |
104 | 154 | :transfer="true" |
105 | | - :type="item.range?(item.type+'range'):item.type" |
106 | | - :format="item.type=='date'? 'yyyy-MM-dd':'yyyy-MM-dd HH:mm:ss'" |
107 | | - :placeholder="item.placeholder||item.title" |
| 155 | + :type="item.range ? item.type + 'range' : item.type" |
| 156 | + :format=" |
| 157 | + item.type == 'date' ? 'yyyy-MM-dd' : 'yyyy-MM-dd HH:mm:ss' |
| 158 | + " |
| 159 | + :placeholder="item.placeholder || item.title" |
108 | 160 | :value="_formFields[item.field]" |
109 | | - @on-change="(time)=>{_formFields[item.field]=time; validateField(item); return time}" |
| 161 | + @on-change=" |
| 162 | + (time) => { |
| 163 | + _formFields[item.field] = time; |
| 164 | + validateField(item); |
| 165 | + return time; |
| 166 | + } |
| 167 | + " |
110 | 168 | ></DatePicker> |
111 | 169 | </FormItem> |
112 | 170 | </Col> |
113 | 171 | </Row> |
| 172 | + <!-- 2020.10.17增加iview time组件 --> |
| 173 | + <TimePicker |
| 174 | + confirm |
| 175 | + v-else-if="item.type == 'time'" |
| 176 | + type="time" |
| 177 | + :format="item.format" |
| 178 | + v-model="_formFields[item.field]" |
| 179 | + :placeholder="item.placeholder || item.title" |
| 180 | + > |
| 181 | + </TimePicker> |
114 | 182 | <CheckboxGroup |
115 | | - @on-change="(arr)=>{item.onChange&&item.onChange(arr)}" |
116 | | - v-else-if="item.type=='checkbox'" |
| 183 | + @on-change=" |
| 184 | + (arr) => { |
| 185 | + item.onChange && item.onChange(arr); |
| 186 | + } |
| 187 | + " |
| 188 | + v-else-if="item.type == 'checkbox'" |
117 | 189 | v-model="_formFields[item.field]" |
118 | 190 | > |
119 | 191 | <Checkbox |
120 | | - v-for="(kv,kvIndex) in item.data" |
| 192 | + v-for="(kv, kvIndex) in item.data" |
121 | 193 | :key="kvIndex" |
122 | 194 | :label="kv.key" |
123 | | - >{{kv.value}}</Checkbox> |
| 195 | + >{{ kv.value }}</Checkbox |
| 196 | + > |
124 | 197 | </CheckboxGroup> |
125 | 198 | <vol-upload |
126 | | - v-else-if="isFile(item,_formFields)" |
| 199 | + v-else-if="isFile(item, _formFields)" |
127 | 200 | :desc="item.desc" |
128 | 201 | :multiple="item.multiple" |
129 | 202 | :max-file="item.maxFile" |
130 | 203 | :max-size="item.maxSize" |
131 | 204 | :autoUpload="item.autoUpload" |
132 | 205 | :fileInfo="_formFields[item.field]" |
133 | 206 | :url="item.url" |
134 | | - :img="item.type=='img'||item.columnType=='img'" |
135 | | - :excel="item.type=='excel'" |
136 | | - :fileTypes="item.fileTypes?item.fileTypes:[]" |
| 207 | + :img="item.type == 'img' || item.columnType == 'img'" |
| 208 | + :excel="item.type == 'excel'" |
| 209 | + :fileTypes="item.fileTypes ? item.fileTypes : []" |
137 | 210 | :upload-before="item.uploadBefore" |
138 | 211 | :upload-after="item.uploadAfter" |
139 | | - :append="item.append?true:false" |
| 212 | + :append="item.append ? true : false" |
140 | 213 | :on-change="item.onChange" |
141 | 214 | :file-click="item.fileClick" |
142 | 215 | :remove-before="item.removeBefore" |
143 | | - :down-load="item.downLoad?true:false" |
| 216 | + :down-load="item.downLoad ? true : false" |
144 | 217 | ></vol-upload> |
145 | 218 | <!-- 2020.05.31增加iview组件Cascader --> |
146 | 219 | <!--2020.09.19增加级联 @on-change="item.onChange"事件 --> |
147 | 220 | <Cascader |
148 | | - v-else-if="item.type=='cascader'" |
| 221 | + v-else-if="item.type == 'cascader'" |
149 | 222 | :load-data="item.loadData" |
150 | | - @on-change="(value, selectedData)=>{item.onChange&&item.onChange(value, selectedData)}" |
| 223 | + @on-change=" |
| 224 | + (value, selectedData) => { |
| 225 | + item.onChange && item.onChange(value, selectedData); |
| 226 | + } |
| 227 | + " |
151 | 228 | :data="item.data" |
152 | 229 | filterable |
153 | 230 | :render-format="item.formatter" |
154 | 231 | v-model="_formFields[item.field]" |
155 | 232 | ></Cascader> |
156 | 233 | <!--2020.09.05增加textarea标签的最小高度item.minRows属性 --> |
157 | 234 | <Input |
158 | | - v-else-if="item.type=='textarea'" |
| 235 | + v-else-if="item.type == 'textarea'" |
159 | 236 | v-model="_formFields[item.field]" |
160 | 237 | type="textarea" |
161 | | - @on-keypress="($event)=>{item.onKeyPress&&item.onKeyPress($event)}" |
| 238 | + @on-keypress=" |
| 239 | + ($event) => { |
| 240 | + item.onKeyPress && item.onKeyPress($event); |
| 241 | + } |
| 242 | + " |
162 | 243 | clearable |
163 | | - :autosize="{minRows:item.minRows||2,maxRows:item.maxRows||10}" |
164 | | - :placeholder="item.placeholder?item.placeholder:( '请输入'+item.title)" |
| 244 | + :autosize="{ |
| 245 | + minRows: item.minRows || 2, |
| 246 | + maxRows: item.maxRows || 10, |
| 247 | + }" |
| 248 | + :placeholder=" |
| 249 | + item.placeholder ? item.placeholder : '请输入' + item.title |
| 250 | + " |
165 | 251 | :ref="item.field" |
166 | 252 | /> |
167 | 253 | <Input |
168 | 254 | clearable |
169 | | - v-else-if="item.type=='password'" |
| 255 | + v-else-if="item.type == 'password'" |
170 | 256 | type="password" |
171 | 257 | autocomplete="off" |
172 | 258 | v-model.number="_formFields[item.field]" |
173 | | - @on-keypress="($event)=>{item.onKeyPress&&item.onKeyPress($event)}" |
174 | | - :placeholder="item.placeholder?item.placeholder:( '请输入'+item.title)" |
| 259 | + @on-keypress=" |
| 260 | + ($event) => { |
| 261 | + item.onKeyPress && item.onKeyPress($event); |
| 262 | + } |
| 263 | + " |
| 264 | + :placeholder=" |
| 265 | + item.placeholder ? item.placeholder : '请输入' + item.title |
| 266 | + " |
175 | 267 | :ref="item.field" |
176 | 268 | /> |
177 | 269 | <Input |
178 | 270 | clearable |
179 | 271 | v-else |
180 | | - @on-keypress="($event)=>{item.onKeyPress&&item.onKeyPress($event)}" |
| 272 | + @on-keypress=" |
| 273 | + ($event) => { |
| 274 | + item.onKeyPress && item.onKeyPress($event); |
| 275 | + } |
| 276 | + " |
181 | 277 | v-model="_formFields[item.field]" |
182 | | - :placeholder="item.placeholder?item.placeholder:( '请输入'+item.title)" |
| 278 | + :placeholder=" |
| 279 | + item.placeholder ? item.placeholder : '请输入' + item.title |
| 280 | + " |
183 | 281 | :ref="item.field" |
184 | 282 | /> |
185 | 283 |
|
186 | 284 | <div class="form-extra" v-if="item.extra"> |
187 | 285 | <a |
188 | 286 | :style="item.extra.style" |
189 | | - @click="()=>{item.extra.click&&item.extra.click(item,_formFields[item.field])}" |
| 287 | + @click=" |
| 288 | + () => { |
| 289 | + item.extra.click && |
| 290 | + item.extra.click(item, _formFields[item.field]); |
| 291 | + } |
| 292 | + " |
190 | 293 | > |
191 | 294 | <Icon v-if="item.extra.icon" :type="item.extra.icon" /> |
192 | | - {{item.extra.text}} |
| 295 | + {{ item.extra.text }} |
193 | 296 | </a> |
194 | 297 | </div> |
195 | 298 | </div> |
@@ -474,11 +577,16 @@ export default { |
474 | 577 | return; |
475 | 578 | //弹出框或初始化表单时给data设置数组默认值2 |
476 | 579 | //2020.09.26修复远程搜索自定义url不起作用的问题 |
477 | | - let url ; |
| 580 | + let url; |
478 | 581 | if (typeof item.url == "function") { |
479 | 582 | url = item.url(val, item.dataKey, item); |
480 | 583 | } else { |
481 | | - url = (item.url || "/api/Sys_Dictionary/GetSearchDictionary") + "?dicNo=" +item.dataKey + "&value=" + val; |
| 584 | + url = |
| 585 | + (item.url || "/api/Sys_Dictionary/GetSearchDictionary") + |
| 586 | + "?dicNo=" + |
| 587 | + item.dataKey + |
| 588 | + "&value=" + |
| 589 | + val; |
482 | 590 | } |
483 | 591 | this.http.post(url).then((dicData) => { |
484 | 592 | this.$set(item, "loading", false); |
|
0 commit comments