Browse Source

完善图片选择组件

old
wangqing 4 years ago
parent
commit
9697b15a4c
  1. 60
      src/components/Form/ImageSelect/index.vue

60
src/components/Form/ImageSelect/index.vue

@ -2,31 +2,37 @@
<div> <div>
<el-radio-group <el-radio-group
v-if="!multiple" v-if="!multiple"
v-bind="$attrs" v-on="$listeners" @change="onChange" v-model="selectValue"
> >
<div v-for="option in options" :key="option.value" class="img-radio-item"> <div v-for="option in options" :key="option.value" class="img-radio-item">
<el-image <el-image
class="image" :preview-src-list="[option.image]"
:src="option.image" :src="option.image"
class="image"
fit="scale-down" fit="scale-down"
:preview-src-list="[option.image]" >
/> <div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
<el-radio :label="option.value">{{ option.label }}</el-radio> <el-radio :label="option.value">{{ option.label }}</el-radio>
</div> </div>
</el-radio-group> </el-radio-group>
<el-checkbox-group <el-checkbox-group
v-else v-else
v-bind="$attrs" v-on="$listeners" v-model="selectValue"
@change="onChange"
> >
<div v-for="option in options" :key="option.value" class="img-radio-item"> <div v-for="option in options" :key="option.value" class="img-radio-item">
<el-image <el-image
class="image" :preview-src-list="[option.image]"
:src="option.image" :src="option.image"
class="image"
fit="scale-down" fit="scale-down"
:preview-src-list="[option.image]" >
/> <div slot="error" class="image-slot">
<i class="el-icon-picture-outline" />
</div>
</el-image>
<el-checkbox :label="option.value">{{ option.label }}</el-checkbox> <el-checkbox :label="option.value">{{ option.label }}</el-checkbox>
</div> </div>
</el-checkbox-group> </el-checkbox-group>
@ -37,6 +43,10 @@
export default { export default {
name: 'ImageSelect', name: 'ImageSelect',
props: { props: {
value: {
type: Number,
default: 1
},
options: { options: {
type: Array, type: Array,
default: function() { default: function() {
@ -49,12 +59,21 @@ export default {
default: false default: false
} }
}, },
methods: { data() {
onChange(e) { return {
console.log(e) selectValue: this.value
console.log(JSON.stringify(this.options))
this.$emit('change', e)
} }
},
watch: {
selectValue(val) {
this.$emit('input', val)
},
value(val) {
this.selectValue = val
}
},
methods: {
} }
} }
</script> </script>
@ -72,6 +91,7 @@ export default {
border: 1px solid rgba(0, 0, 0, 0.1) !important; border: 1px solid rgba(0, 0, 0, 0.1) !important;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !important; box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !important;
margin: 3px !important; margin: 3px !important;
background-color: #fff;
.image { .image {
width: 100px; width: 100px;
height: 100px; height: 100px;
@ -81,4 +101,14 @@ export default {
margin: 4px; margin: 4px;
} }
} }
::v-deep .image-slot {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100%;
//background: #f5f7fa;
color: #909399;
font-size: 30px;
}
</style> </style>

Loading…
Cancel
Save