jufubao-admin-library 1.1.176 → 1.1.178

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.
@@ -55,7 +55,7 @@
55
55
  >
56
56
  <el-option
57
57
  :key="item.value"
58
- v-for="item in timeList"
58
+ v-for="item in startTimeList(item.end)"
59
59
  :label="item.label"
60
60
  :value="item.value"
61
61
  ></el-option>
@@ -68,7 +68,7 @@
68
68
  >
69
69
  <el-option
70
70
  :key="item.value"
71
- v-for="item in timeList"
71
+ v-for="item in endTimeList(item.start)"
72
72
  :label="item.label"
73
73
  :value="item.value"
74
74
  ></el-option>
@@ -489,7 +489,7 @@
489
489
  this.$message.error('请选择时间')
490
490
  return
491
491
  }
492
- if(this.handTimeOptions[i]['end']<this.handTimeOptions[i]['start']){
492
+ if(Number(this.handTimeOptions[i]['end'])<Number(this.handTimeOptions[i]['start'])){
493
493
  this.$message.error('开始时间不能大于结束时间')
494
494
  return
495
495
  }
@@ -572,6 +572,34 @@
572
572
  remove(index) {
573
573
  this.handTimeOptions.splice(index, 1);
574
574
  },
575
+ /**
576
+ * 根据结束时间过滤开始时间列表
577
+ * @param {number} end - 结束时间,用于过滤开始时间列表
578
+ * @returns {Array} 过滤后的时间列表
579
+ */
580
+ startTimeList(end) {
581
+ let timeList = this.timeList // 获取组件中的时间列表
582
+ if (end) { // 如果提供了结束时间
583
+ timeList = timeList.filter(item => { // 过滤时间列表
584
+ return Number(item.value) <= Number(end) // 只保留值小于结束时间的时间项
585
+ })
586
+ }
587
+ return timeList // 返回过滤后的时间列表
588
+ },
589
+ /**
590
+ * 根据开始时间过滤并返回结束时间列表
591
+ * @param {number} start - 开始时间,用于过滤时间列表
592
+ * @returns {Array} 过滤后的时间列表
593
+ */
594
+ endTimeList(start) {
595
+ let timeList = this.timeList // 获取组件中的时间列表
596
+ if (start) { // 如果传入了开始时间
597
+ timeList = timeList.filter(item => { // 过滤时间列表
598
+ return Number(item.value) >= Number(start) // 只保留值大于开始时间的时间项
599
+ })
600
+ }
601
+ return timeList // 返回处理后的时间列表
602
+ }
575
603
 
576
604
  }
577
605
  }
@@ -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.178",
4
4
  "description": "聚福宝福利后台管理系统公共模块",
5
5
  "author": "goashiyong <gaoshiyong1272@vip.163.com>",
6
6
  "scripts": {