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: "input40",
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: "input40",
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: "input40",
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: "input40",
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: "input40",
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: "input40",
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
- let myValue = JSON.parse(item.default);
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
- let myValue = item.default
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>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jufubao-admin-library",
3
- "version": "1.1.176",
3
+ "version": "1.1.177",
4
4
  "description": "聚福宝福利后台管理系统公共模块",
5
5
  "author": "goashiyong <gaoshiyong1272@vip.163.com>",
6
6
  "scripts": {