com-specs-select.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template id="com-specs-select">
  2. <div class="specs-select">
  3. <span class="el-dropdown-link" @click="showSelect">
  4. 选择已有规格<i class="el-icon-arrow-down el-icon--right"></i>
  5. </span>
  6. <el-collapse-transition>
  7. <ul class="down-select" v-if="downSelectShow">
  8. <li class="el-dropdown-menu__item" v-for="item in specsList" @click="useSpecs(item, group)">{{ item.name }}</li>
  9. <li class="el-dropdown-menu__item el-dropdown-menu__item--divided" :class="loadMoreLoding ? 'is-disabled' : ''" @click="loadMore">
  10. <span>加载更多</span>
  11. </li>
  12. </ul>
  13. </el-collapse-transition>
  14. </div>
  15. </template>
  16. <script>
  17. Vue.component('com-specs-select', {
  18. template: '#com-specs-select',
  19. props: {
  20. specsList: {
  21. type: Array,
  22. default: () => {
  23. return []
  24. }
  25. },
  26. index: Number,
  27. group: Object,
  28. loadMoreLoding: Boolean,
  29. },
  30. data() {
  31. return {
  32. downSelectShow: false,
  33. }
  34. },
  35. watch: {
  36. specsList(item1, item2) {
  37. if (this.group && this.group.attr_group_name) {
  38. let name = this.group.attr_group_name
  39. let item = this.specsList.find(function(obj) {
  40. return obj.name == name
  41. })
  42. if (item) {
  43. this.useSpecs(item)
  44. this.showSelect()
  45. }
  46. }
  47. },
  48. },
  49. methods: {
  50. getSpecs() {
  51. request({
  52. params: {
  53. r: 'mall/specs/index',
  54. page: this.specsPage,
  55. limit: this.specsLimit
  56. },
  57. method: 'get',
  58. }).then(e => {
  59. if (e.data.code === 0) {
  60. this.specsList = [
  61. ...this.specsList,
  62. ...e.data.data.list
  63. ]
  64. this.pageCount = e.data.data.page_count
  65. this.loadMoreLoding = false
  66. }
  67. })
  68. },
  69. showSelect() {
  70. this.downSelectShow = !this.downSelectShow
  71. },
  72. /**
  73. * 加载更多
  74. */
  75. loadMore() {
  76. this.$emit('load-more')
  77. },
  78. /**
  79. * 使用规格
  80. */
  81. useSpecs(item) {
  82. this.showSelect()
  83. this.$emit('use-specs', item, this.group, this.index)
  84. },
  85. }
  86. })
  87. </script>
  88. <style>
  89. .specs-select {
  90. margin-right: 16px;
  91. }
  92. .el-dropdown-link {
  93. cursor: pointer;
  94. color: #409EFF;
  95. }
  96. .el-icon-arrow-down {
  97. font-size: 12px;
  98. }
  99. .down-select {
  100. position: absolute;
  101. /* top: 0; */
  102. /* left: 0; */
  103. z-index: 10;
  104. padding: 10px 0;
  105. margin: 5px 0;
  106. background-color: #fff;
  107. border: 1px solid #ebeef5;
  108. border-radius: 4px;
  109. box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
  110. }
  111. </style>