LineWidthSelect.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <el-dropdown
  3. trigger="click"
  4. class="line-width-select custom-select"
  5. placement="bottom-start"
  6. @command="select"
  7. >
  8. <div class="select-preview">
  9. <div class="select-preview-main">
  10. <div class="width-item" v-if="selected">
  11. <!-- <span>{{ selected }}</span> -->
  12. <i :style="{ borderBottomWidth: selected }"></i>
  13. </div>
  14. </div>
  15. <div class="select-preview-icon">
  16. <i class="el-icon-arrow-down"></i>
  17. </div>
  18. </div>
  19. <el-dropdown-menu slot="dropdown" class="line-width-menu">
  20. <el-dropdown-item
  21. v-for="(option, index) in optionList"
  22. :key="index"
  23. :command="option"
  24. >
  25. <div class="width-item">
  26. <!-- <span>{{ option }}</span> -->
  27. <i :style="{ borderBottomWidth: option }"></i>
  28. </div>
  29. </el-dropdown-item>
  30. </el-dropdown-menu>
  31. </el-dropdown>
  32. </template>
  33. <script>
  34. const PREDEFINE_OPTIONS = ["1px", "2px", "3px"];
  35. export default {
  36. name: "line-width-select",
  37. props: {
  38. value: String,
  39. predefine: Array,
  40. },
  41. data() {
  42. return {
  43. optionList: [],
  44. selected: "",
  45. };
  46. },
  47. watch: {
  48. value: {
  49. immediate: true,
  50. handler(val) {
  51. this.selected = val;
  52. },
  53. },
  54. },
  55. created() {
  56. this.optionList =
  57. this.predefine && this.predefine.length
  58. ? this.predefine
  59. : PREDEFINE_OPTIONS;
  60. },
  61. methods: {
  62. select(option) {
  63. this.selected = option;
  64. this.$emit("input", this.selected);
  65. this.$emit("change", this.selected);
  66. },
  67. },
  68. };
  69. </script>