SizeSelect.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <template>
  2. <el-select
  3. class="size-select"
  4. v-model="selected"
  5. placeholder="请选择"
  6. @change="select"
  7. >
  8. <el-option
  9. v-for="item in optionList"
  10. :key="item.value"
  11. :label="item.label"
  12. :value="item.value"
  13. >
  14. <span :style="{ fontSize: item.value }">{{ item.label }}</span>
  15. </el-option>
  16. </el-select>
  17. </template>
  18. <script>
  19. const PREDEFINE_OPTIONS = [
  20. {
  21. value: "14px",
  22. label: "小(5号)"
  23. },
  24. {
  25. value: "18.7px",
  26. label: "中(4号)"
  27. },
  28. {
  29. value: "21.3px",
  30. label: "大(3号)"
  31. },
  32. {
  33. value: "29.3px",
  34. label: "特大(2号)"
  35. },
  36. {
  37. value: "34.7px",
  38. label: "超大(1号)"
  39. }
  40. ];
  41. export default {
  42. name: "size-select",
  43. props: {
  44. value: String,
  45. predefine: Array
  46. },
  47. data() {
  48. return {
  49. optionList: [],
  50. selected: ""
  51. };
  52. },
  53. watch: {
  54. value: {
  55. immediate: true,
  56. handler(val) {
  57. this.selected = val;
  58. }
  59. }
  60. },
  61. created() {
  62. this.optionList =
  63. this.predefine && this.predefine.length
  64. ? this.predefine
  65. : PREDEFINE_OPTIONS;
  66. },
  67. methods: {
  68. select() {
  69. this.$emit("input", this.selected);
  70. this.$emit("change", this.selected);
  71. }
  72. }
  73. };
  74. </script>