jufubao-admin-library 1.1.176 → 1.1.177
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.
|
@@ -95,6 +95,14 @@ export default {
|
|
|
95
95
|
this.initForm(this.listValue)
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
+
},
|
|
99
|
+
'listValue.media_type': {
|
|
100
|
+
handler(n, o){
|
|
101
|
+
if(n !== o){
|
|
102
|
+
if(this.firstIndex++ === 0) return;
|
|
103
|
+
this.initForm({...this.listValue, media_count: '', media_size: ''})
|
|
104
|
+
}
|
|
105
|
+
}
|
|
98
106
|
}
|
|
99
107
|
},
|
|
100
108
|
computed: {
|
|
@@ -108,6 +116,7 @@ export default {
|
|
|
108
116
|
renderFormKey: "renderFormKey",
|
|
109
117
|
dataInfo: null,
|
|
110
118
|
interval: null,
|
|
119
|
+
firstIndex: 0,
|
|
111
120
|
}
|
|
112
121
|
},
|
|
113
122
|
created(){
|
|
@@ -151,6 +160,11 @@ export default {
|
|
|
151
160
|
// other['date_type'] = validate_type;
|
|
152
161
|
// other['date_range'] = rule ? rule.date_range : "";
|
|
153
162
|
}
|
|
163
|
+
if(field_type === 'media'){
|
|
164
|
+
other['media_type'] = validate_type;
|
|
165
|
+
other['media_count'] = rule['media_count'];
|
|
166
|
+
other['media_size'] = rule['media_size'];
|
|
167
|
+
}
|
|
154
168
|
if(this.baseType === 'answer'){
|
|
155
169
|
if(field_type === 'radio'){
|
|
156
170
|
other['answer'] = answer[0];
|
|
@@ -172,7 +186,7 @@ export default {
|
|
|
172
186
|
ele: "xd-select-list",
|
|
173
187
|
valueKey: "field_type",
|
|
174
188
|
value: params.field_type || "",
|
|
175
|
-
className: "
|
|
189
|
+
className: "input60",
|
|
176
190
|
list: this.fieldList,
|
|
177
191
|
disabled: !!this.fieldData,
|
|
178
192
|
rules: [
|
|
@@ -185,7 +199,7 @@ export default {
|
|
|
185
199
|
valueKey: "field_name",
|
|
186
200
|
value: params.field_name || "",
|
|
187
201
|
placeholder: "请输入标题",
|
|
188
|
-
className: "
|
|
202
|
+
className: "input60",
|
|
189
203
|
rules: [
|
|
190
204
|
{ required: true, message: "请输入标题", trigger: "blur" },
|
|
191
205
|
]
|
|
@@ -206,7 +220,7 @@ export default {
|
|
|
206
220
|
valueKey: "explain",
|
|
207
221
|
value: params.explain || "",
|
|
208
222
|
placeholder: "请输入标题说明",
|
|
209
|
-
className: "
|
|
223
|
+
className: "input60",
|
|
210
224
|
extendClass: params.is_show_explain === 'Y' ? "" : "jfb-hidden"
|
|
211
225
|
},
|
|
212
226
|
showPlaceholder && {
|
|
@@ -215,7 +229,7 @@ export default {
|
|
|
215
229
|
valueKey: "placeholder",
|
|
216
230
|
value: params.placeholder || "",
|
|
217
231
|
placeholder: "请填写提示语",
|
|
218
|
-
className: "
|
|
232
|
+
className: "input60",
|
|
219
233
|
},
|
|
220
234
|
{
|
|
221
235
|
label: "必填项:",
|
|
@@ -282,7 +296,7 @@ export default {
|
|
|
282
296
|
{ label: "单选", value: "N" },
|
|
283
297
|
{ label: "多选", value: "Y" },
|
|
284
298
|
],
|
|
285
|
-
className: "
|
|
299
|
+
className: "input60",
|
|
286
300
|
},
|
|
287
301
|
params.field_type === 'date' && {
|
|
288
302
|
label: "日期",
|
|
@@ -293,6 +307,63 @@ export default {
|
|
|
293
307
|
{ required: true, message: "请选择是否必填", trigger: "blur" },
|
|
294
308
|
]
|
|
295
309
|
},
|
|
310
|
+
params.field_type === 'media' && [
|
|
311
|
+
{
|
|
312
|
+
label: "上传类型:",
|
|
313
|
+
ele: "xd-radio",
|
|
314
|
+
valueKey: "media_type",
|
|
315
|
+
value: params.media_type || "image",
|
|
316
|
+
list: [
|
|
317
|
+
{ label: "图片", value: "image" },
|
|
318
|
+
{ label: "视频", value: "video" },
|
|
319
|
+
],
|
|
320
|
+
rules: [
|
|
321
|
+
{ required: true, message: "请选择上传类型", trigger: "blur" },
|
|
322
|
+
]
|
|
323
|
+
},
|
|
324
|
+
params.media_type !== 'video' &&{
|
|
325
|
+
label: "上传数量:",
|
|
326
|
+
ele: "el-input",
|
|
327
|
+
type: "number",
|
|
328
|
+
valueKey: "media_count",
|
|
329
|
+
value: params.media_count,
|
|
330
|
+
placeholder: "请填写可上传张数(最多可上传9张)",
|
|
331
|
+
className: "input60",
|
|
332
|
+
rules: [
|
|
333
|
+
{ required: true, message: "请输入上传数量", trigger: "blur" },
|
|
334
|
+
{ validator: (rule, value, callback) => {
|
|
335
|
+
if(value.toString().indexOf('.') > -1){
|
|
336
|
+
callback(new Error('请输入正确的上传数量'));
|
|
337
|
+
}else if(value > 9){
|
|
338
|
+
callback(new Error('最多可上传9张'));
|
|
339
|
+
} else if(value < 1){
|
|
340
|
+
callback(new Error('最少上传一张'));
|
|
341
|
+
}else{
|
|
342
|
+
callback()
|
|
343
|
+
}
|
|
344
|
+
} },
|
|
345
|
+
]
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
label: "上传大小:",
|
|
349
|
+
ele: "el-input",
|
|
350
|
+
type: "number",
|
|
351
|
+
valueKey: "media_size",
|
|
352
|
+
value: params.media_size,
|
|
353
|
+
placeholder: "上传单个文件大小(单位:MB)",
|
|
354
|
+
className: "input60",
|
|
355
|
+
rules: [
|
|
356
|
+
{ required: true, message: "请输入上传大小", trigger: "blur" },
|
|
357
|
+
{ validator: (rule, value, callback) => {
|
|
358
|
+
if(value <= 0 || value > 1024){
|
|
359
|
+
callback(new Error('请输入正确的上传文件大小'));
|
|
360
|
+
}else{
|
|
361
|
+
callback()
|
|
362
|
+
}
|
|
363
|
+
} },
|
|
364
|
+
]
|
|
365
|
+
}
|
|
366
|
+
],
|
|
296
367
|
this.baseType === 'answer' && {
|
|
297
368
|
label: "是否校验答案:",
|
|
298
369
|
ele: "xd-radio",
|
|
@@ -313,7 +384,7 @@ export default {
|
|
|
313
384
|
value: params.answer || [],
|
|
314
385
|
list: params.options,
|
|
315
386
|
multiple: params.field_type === 'checkbox' ? true : false,
|
|
316
|
-
className: "
|
|
387
|
+
className: "input60",
|
|
317
388
|
rules: [
|
|
318
389
|
{ required: true, message: "请选择正确选项", trigger: "blur" },
|
|
319
390
|
]
|
|
@@ -74,6 +74,7 @@ export default {
|
|
|
74
74
|
{ label: "多选", value: "checkbox", placeholder: false },
|
|
75
75
|
{ label: "下拉框", value: "select", placeholder: true },
|
|
76
76
|
{ label: "日期", value: "date", placeholder: false },
|
|
77
|
+
{ label: "视频图片文件", value: "media", placeholder: false },
|
|
77
78
|
// { label: "年月日", value: "datepicker", placeholder: false}
|
|
78
79
|
],
|
|
79
80
|
dialogVisible: false,
|
|
@@ -154,7 +155,7 @@ export default {
|
|
|
154
155
|
},
|
|
155
156
|
handleCreateField(data){
|
|
156
157
|
console.log("handleCreateField", data);
|
|
157
|
-
const { rule, options, multiple, date_rule, answer, ...postData } = data;
|
|
158
|
+
const { rule, options, multiple, date_rule, answer, media_type, media_count, media_size, ...postData } = data;
|
|
158
159
|
let form_id = this.form_id;
|
|
159
160
|
//input\textarea 规则
|
|
160
161
|
if(rule && rule.limit){
|
|
@@ -178,6 +179,15 @@ export default {
|
|
|
178
179
|
postData['validate_type'] = date_type; //日期选择方式
|
|
179
180
|
postData['validate_rules'] = JSON.stringify(dateOther);
|
|
180
181
|
}
|
|
182
|
+
//图、视频文件
|
|
183
|
+
if(data.field_type === 'media'){
|
|
184
|
+
postData['validate_type'] = media_type;
|
|
185
|
+
postData['validate_rules'] = JSON.stringify({
|
|
186
|
+
media_count: media_type === 'image' ? media_count : 1,
|
|
187
|
+
media_size: media_size
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
181
191
|
if(typeof answer === 'string'){
|
|
182
192
|
postData['answer'] = [answer];
|
|
183
193
|
}else{
|
|
@@ -40,6 +40,25 @@
|
|
|
40
40
|
<el-radio-group v-if="item.field_type === 'radio'" :value="item.default">
|
|
41
41
|
<el-radio v-for="opt in item.options" :key="opt.value" :label="opt.value">{{opt.label}}</el-radio>
|
|
42
42
|
</el-radio-group>
|
|
43
|
+
<div v-if="item.field_type === 'media'">
|
|
44
|
+
<div v-if="!item.default.length" style="width: 300px;">
|
|
45
|
+
<xd-no-data :height="100" />
|
|
46
|
+
</div>
|
|
47
|
+
<template v-else>
|
|
48
|
+
<div v-if="item.validate_type === 'image'" class="media_wrap">
|
|
49
|
+
<div v-for="img in item.default" class="media_inner" style="width: 100px;height: 100px;">
|
|
50
|
+
<el-image :src="img" style="width: 100px;height: 100px;background-color: #EEE;" fit="contain" :preview-src-list="item.default"></el-image>
|
|
51
|
+
<!-- <img :src="img" alt="" style="width: 100px;height: 100px;"> -->
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
<div v-if="item.validate_type === 'video'" class="media_wrap">
|
|
55
|
+
<div v-for="videoSrc in item.default" class="media_inner">
|
|
56
|
+
<video :src="videoSrc" width="320" height="180" controls>
|
|
57
|
+
</video>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
</div>
|
|
43
62
|
</el-form-item>
|
|
44
63
|
</el-form>
|
|
45
64
|
</div>
|
|
@@ -47,7 +66,11 @@
|
|
|
47
66
|
</template>
|
|
48
67
|
<script>
|
|
49
68
|
import { mapActions } from 'vuex';
|
|
69
|
+
import XdNoData from "@/components/XdNoData"
|
|
50
70
|
export default {
|
|
71
|
+
components: {
|
|
72
|
+
XdNoData
|
|
73
|
+
},
|
|
51
74
|
data(){
|
|
52
75
|
return {
|
|
53
76
|
formList: [],
|
|
@@ -69,8 +92,9 @@ export default {
|
|
|
69
92
|
if(item.is_show_explain !== 'Y'){
|
|
70
93
|
item.explain = "";
|
|
71
94
|
}
|
|
95
|
+
var myValue = "";
|
|
72
96
|
try{
|
|
73
|
-
|
|
97
|
+
myValue = JSON.parse(item.default);
|
|
74
98
|
if(item.field_type === 'radio'){
|
|
75
99
|
item.default = Array.isArray(myValue) ? myValue[0] : myValue+'';
|
|
76
100
|
}
|
|
@@ -78,13 +102,16 @@ export default {
|
|
|
78
102
|
item.default = Array.isArray(myValue) ? myValue : myValue.split(",");
|
|
79
103
|
}
|
|
80
104
|
}catch(e){
|
|
81
|
-
|
|
105
|
+
myValue = item.default || "";
|
|
82
106
|
if(item.field_type === 'radio'){
|
|
83
107
|
item.default = myValue;
|
|
84
108
|
}
|
|
85
109
|
if(item.field_type === 'checkbox'){
|
|
86
110
|
item.default = myValue.split(",");
|
|
87
111
|
}
|
|
112
|
+
if(item.field_type === 'media'){
|
|
113
|
+
item.default = myValue && myValue.split(",").map(item => this.getImageFullPath(item));
|
|
114
|
+
}
|
|
88
115
|
}
|
|
89
116
|
return item;
|
|
90
117
|
});
|
|
@@ -112,5 +139,13 @@ export default {
|
|
|
112
139
|
margin-top: -18px;
|
|
113
140
|
margin-left: 10px;
|
|
114
141
|
}
|
|
142
|
+
.media_wrap{
|
|
143
|
+
display: flex;
|
|
144
|
+
flex-wrap: wrap;
|
|
145
|
+
width: 360px;
|
|
146
|
+
.media_inner{
|
|
147
|
+
margin: 0 10px 10px 0;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
115
150
|
}
|
|
116
151
|
</style>
|