SelectSerialNumberStyle.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <template>
  2. <div class="sn-style">
  3. <el-select ref="selectStyle" v-model="sn_style" class="style-shape" @change="changeSerialNumberStyle">
  4. <el-option v-for="(item, i) in serialNumberStyleList" :key="i" :value="item.value">
  5. <span class="sn-box" :style="serialNumberStyle(item.value)">{{ serialNumber }}</span>
  6. </el-option>
  7. </el-select>
  8. <el-color-picker v-model="sn_background_color" class="style-color" @change="changeSerialNumberStyle" />
  9. <div class="sn-box view-style" :style="serialNumberStyle(sn_style)">{{ serialNumber }}</div>
  10. </div>
  11. </template>
  12. <script>
  13. import { serialNumberStyleList } from '@/views/book/courseware/data/common';
  14. export default {
  15. name: 'SelectSerialNumberStyle',
  16. props: {
  17. serialNumber: {
  18. type: [Number, String],
  19. required: true,
  20. },
  21. snStyle: {
  22. type: String,
  23. default: '',
  24. },
  25. snBackgroundColor: {
  26. type: String,
  27. default: '',
  28. },
  29. },
  30. data() {
  31. return {
  32. serialNumberStyleList,
  33. sn_style: this.snStyle,
  34. sn_background_color: this.snBackgroundColor,
  35. };
  36. },
  37. watch: {
  38. snBackgroundColor: {
  39. handler(val) {
  40. this.sn_background_color = val;
  41. },
  42. deep: true,
  43. },
  44. snStyle: {
  45. handler(val) {
  46. this.sn_style = val;
  47. },
  48. deep: true,
  49. },
  50. },
  51. methods: {
  52. // 序号样式
  53. serialNumberStyle(styleType) {
  54. let serialNumberStyle = {};
  55. const _color = `${this.sn_background_color}`;
  56. switch (styleType) {
  57. case 'solidBlockStyle':
  58. serialNumberStyle = {
  59. borderRadius: '4px',
  60. backgroundColor: _color,
  61. color: '#fff',
  62. };
  63. break;
  64. case 'solidCircleStyle':
  65. serialNumberStyle = {
  66. borderRadius: '40px',
  67. backgroundColor: _color,
  68. color: '#fff',
  69. };
  70. break;
  71. case 'hollowBlockStyle':
  72. serialNumberStyle = {
  73. border: `1px solid ${_color}`,
  74. borderRadius: '4px',
  75. color: _color,
  76. };
  77. break;
  78. case 'hollowCircleStyle':
  79. serialNumberStyle = {
  80. border: `1px solid ${_color}`,
  81. borderRadius: '40px',
  82. color: _color,
  83. };
  84. break;
  85. case 'defaultStyle':
  86. serialNumberStyle = {
  87. color: _color,
  88. };
  89. break;
  90. default:
  91. break;
  92. }
  93. return serialNumberStyle;
  94. },
  95. // 设置序号样式
  96. changeSerialNumberStyle() {
  97. this.$emit('changeSerialNumberStyle', this.sn_style, this.sn_background_color);
  98. },
  99. },
  100. };
  101. </script>
  102. <style lang="scss" scoped>
  103. .sn-style {
  104. display: flex;
  105. column-gap: 16px;
  106. .style-shape {
  107. width: 80px;
  108. :deep .el-input {
  109. &__inner {
  110. color: rgba(0, 0, 0, 0%);
  111. }
  112. }
  113. }
  114. .style-color {
  115. width: 40px;
  116. }
  117. .view-style {
  118. position: absolute;
  119. top: 0;
  120. left: 10px;
  121. }
  122. }
  123. .sn-box {
  124. display: flex;
  125. align-items: center;
  126. justify-content: center;
  127. width: 24px;
  128. height: 24px;
  129. margin-top: 5px;
  130. font-size: 16px;
  131. font-weight: 500;
  132. }
  133. </style>