app-diy-form-checkbox-group.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <template>
  2. <view class="app-diy-form-checkbox-group">
  3. <view class="list dir-left-wrap">
  4. <view v-for="(item, index) in model"
  5. :key="index"
  6. @click="handleClick(index)" class="out-of-item box-grow-0">
  7. <view class="item text-ellipsis"
  8. :style="{color: color ? color: '#FF4544',
  9. borderColor: color ? color: '#FF4544',
  10. backgroundColor: item.value ? color: '#FFFFFF',
  11. }"
  12. :class="[
  13. `white-background`,
  14. item.value?`background`:``,
  15. ]">{{item.label}}
  16. </view>
  17. </view>
  18. </view>
  19. </view>
  20. </template>
  21. <script>
  22. export default {
  23. name: 'app-diy-form-checkbox-group',
  24. props: {
  25. sign: {
  26. default: null,
  27. },
  28. value: {
  29. type: Array,
  30. default: [],
  31. },
  32. list: {
  33. type: Array,
  34. default: [],
  35. },
  36. color: {
  37. default: '#ff4544',
  38. }
  39. },
  40. data() {
  41. const model = this.list;
  42. for (let i in model) {
  43. let inArray = false;
  44. for (let j in this.value) {
  45. if (model[i].label === this.value[j]) {
  46. inArray = true;
  47. break;
  48. }
  49. }
  50. if (inArray) {
  51. model[i].value = true;
  52. }
  53. }
  54. return {
  55. model: model,
  56. };
  57. },
  58. methods: {
  59. handleClick(index) {
  60. this.model[index].value = !this.model[index].value;
  61. this.outputData();
  62. },
  63. outputData() {
  64. const value = [];
  65. for (let i in this.model) {
  66. if (this.model[i].value === true) {
  67. value.push(this.model[i].label);
  68. }
  69. }
  70. this.$emit('change', value, this.sign);
  71. this.$emit('input', value, this.sign);
  72. },
  73. },
  74. }
  75. </script>
  76. <style scoped lang="scss">
  77. .app-diy-form-checkbox-group {
  78. width: 100%;
  79. overflow-y: hidden;
  80. //overflow-x: hidden;
  81. }
  82. .list {
  83. //margin-bottom: #{-24rpx};
  84. //margin: 0 -#{6rpx};
  85. }
  86. .out-of-item {
  87. margin-bottom: #{12rpx};
  88. margin-top: #{12rpx};
  89. margin-right: #{10rpx};
  90. display: inline-block;
  91. }
  92. .item {
  93. //display: inline-block;
  94. height: #{56rpx};
  95. line-height: #{54rpx};
  96. border: #{2rpx} solid;
  97. padding: 0 #{24rpx};
  98. border-radius: #{1000rpx};
  99. font-size: $uni-font-size-general-one;
  100. }
  101. .background {
  102. color: #ffffff !important;
  103. }
  104. .border {
  105. border-color: #ff4544;
  106. }
  107. .color {
  108. color: #ff4544;
  109. }
  110. .text-ellipsis{
  111. white-space: nowrap;
  112. overflow: hidden;
  113. text-overflow: ellipsis;
  114. max-width: #{420rpx};
  115. }
  116. </style>