index.vue 958 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <template>
  2. <div class="select-all">
  3. <el-select
  4. multiple
  5. clearable
  6. filterable
  7. collapse-tags
  8. class="select"
  9. v-bind="{...$attrs, ...$props}"
  10. v-on:input="value => $emit('input', value)"
  11. ref="select"
  12. >
  13. <slot/>
  14. </el-select>
  15. <el-button @click="selectAll" class="btn">
  16. 全选
  17. </el-button>
  18. </div>
  19. </template>
  20. <script>
  21. export default {
  22. name: 'select-all',
  23. mounted() {
  24. console.log(this)
  25. },
  26. methods: {
  27. selectAll() {
  28. const { options } = this.$refs.select
  29. const values = options.filter(item => !item.disabled && item.value).map(item => item.value)
  30. this.$emit('input', values)
  31. }
  32. }
  33. }
  34. </script>
  35. <style lang="less" scoped>
  36. .select-all{
  37. display: flex;
  38. .select{
  39. flex: 1;
  40. /deep/ .el-input__inner{
  41. border-radius: 4px 0 0 4px;
  42. }
  43. }
  44. }
  45. .btn{
  46. width: 50px;
  47. padding: 10px;
  48. border-left: none;
  49. border-radius: 0 4px 4px 0;
  50. }
  51. </style>