index.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view class="member_checked_desc">
  3. <view @click="showSelected = true" class="left_info">
  4. <view class="select_num">
  5. <text class="text">{{ `已选择(${choosedData.length})` }}</text>
  6. <u-icon name="arrow-up" size="14" color="#007aff" />
  7. </view>
  8. <view class="select_list">{{ selectedStr }}</view>
  9. </view>
  10. <view class="">
  11. <u-button
  12. :loading="comfirmLoading"
  13. @click="clickComfirm"
  14. :disabled="choosedData.length === 0"
  15. type="primary"
  16. :text="
  17. isRemove
  18. ? '移除'
  19. : `确定(${choosedData.length}${
  20. maxLength > 0 ? `/${maxLength}` : ``
  21. })`
  22. "
  23. />
  24. <u-popup round="24" :show="showSelected" mode="bottom" @close="close">
  25. <view class="selected_container">
  26. <view class="top_desc">
  27. <text>{{ `已选择(${choosedData.length})` }}</text>
  28. <text @click="close" class="comfirm_text">确认</text>
  29. </view>
  30. <u-list class="selected_list">
  31. <u-list-item
  32. v-for="item in choosedData"
  33. :key="item.userID || item.groupID"
  34. >
  35. <selected-member @removeItem="removeItem(item)" :source="item" />
  36. </u-list-item>
  37. </u-list>
  38. </view>
  39. </u-popup>
  40. </view>
  41. </view>
  42. </template>
  43. <script>
  44. import SelectedMember from "./SelectedMember.vue";
  45. export default {
  46. name: "ChooseIndexFooter",
  47. components: {
  48. SelectedMember,
  49. },
  50. props: {
  51. isRemove: Boolean,
  52. choosedData: Array,
  53. comfirmLoading: Boolean,
  54. maxLength: Number,
  55. },
  56. data() {
  57. return {
  58. showSelected: false,
  59. showConfirmModal: false,
  60. };
  61. },
  62. computed: {
  63. selectedStr() {
  64. return this.choosedData
  65. .map((item) => item.nickname || item.showName || item.groupName)
  66. .join("、");
  67. },
  68. },
  69. methods: {
  70. close() {
  71. this.showSelected = false;
  72. },
  73. removeItem(item) {
  74. this.$emit("removeItem", item);
  75. },
  76. clickComfirm() {
  77. this.$emit("confirm");
  78. },
  79. },
  80. };
  81. </script>
  82. <style lang="scss" scoped>
  83. .member_checked_desc {
  84. @include btwBox();
  85. background-color: #fff;
  86. align-items: flex-start;
  87. padding: 24rpx 44rpx 0;
  88. height: 60px;
  89. max-height: 60px;
  90. box-shadow: 0px -1px 4px 1px rgba(0, 0, 0, 0.04);
  91. .left_info {
  92. @include colBox(false);
  93. .select_num {
  94. display: flex;
  95. align-items: center;
  96. color: $uni-color-primary;
  97. }
  98. .select_list {
  99. font-size: 24rpx;
  100. color: #8e9ab0;
  101. overflow: hidden;
  102. white-space: nowrap;
  103. text-overflow: ellipsis;
  104. max-width: 50vw;
  105. }
  106. .text {
  107. font-size: 30rpx;
  108. margin-right: 24rpx;
  109. }
  110. }
  111. .u-button {
  112. background-color: #0089ff;
  113. height: 40px;
  114. margin: 0;
  115. }
  116. }
  117. .selected_container {
  118. padding: 44rpx;
  119. .top_desc {
  120. @include btwBox();
  121. margin-bottom: 20rpx;
  122. .comfirm_text {
  123. color: $uni-color-primary;
  124. margin-right: 24rpx;
  125. }
  126. }
  127. .selected_list {
  128. height: 60vh !important;
  129. overflow-y: auto;
  130. }
  131. }
  132. </style>