You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							166 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							166 lines
						
					
					
						
							3.8 KiB
						
					
					
				
								<template>
							 | 
						|
								  <su-popup
							 | 
						|
								    :show="showTools"
							 | 
						|
								    @close="handleClose"
							 | 
						|
								  >
							 | 
						|
								    <view class="ss-modal-box ss-flex-col">
							 | 
						|
								      <slot></slot>
							 | 
						|
								      <view class="content ss-flex ss-flex-1">
							 | 
						|
								        <template v-if="toolsMode === 'emoji'">
							 | 
						|
								          <swiper
							 | 
						|
								            class="emoji-swiper"
							 | 
						|
								            :indicator-dots="true"
							 | 
						|
								            circular
							 | 
						|
								            indicator-active-color="#7063D2"
							 | 
						|
								            indicator-color="rgba(235, 231, 255, 1)"
							 | 
						|
								            :autoplay="false"
							 | 
						|
								            :interval="3000"
							 | 
						|
								            :duration="1000"
							 | 
						|
								          >
							 | 
						|
								            <swiper-item v-for="emoji in emojiPage" :key="emoji">
							 | 
						|
								              <view class="ss-flex ss-flex-wrap">
							 | 
						|
								                <image
							 | 
						|
								                  v-for="item in emoji" :key="item"
							 | 
						|
								                  class="emoji-img"
							 | 
						|
								                  :src="sheep.$url.cdn(`/static/img/chat/emoji/${item.file}`)"
							 | 
						|
								                  @tap="onEmoji(item)"
							 | 
						|
								                >
							 | 
						|
								                </image>
							 | 
						|
								              </view>
							 | 
						|
								            </swiper-item>
							 | 
						|
								          </swiper>
							 | 
						|
								        </template>
							 | 
						|
								        <template v-else>
							 | 
						|
								          <view class="image">
							 | 
						|
								            <s-uploader
							 | 
						|
								              file-mediatype="image"
							 | 
						|
								              :imageStyles="{ width: 50, height: 50, border: false }"
							 | 
						|
								              @select="imageSelect({ type: 'image', data: $event })"
							 | 
						|
								            >
							 | 
						|
								              <image
							 | 
						|
								                class="icon"
							 | 
						|
								                :src="sheep.$url.static('/static/img/shop/chat/image.png')"
							 | 
						|
								                mode="aspectFill"
							 | 
						|
								              ></image>
							 | 
						|
								            </s-uploader>
							 | 
						|
								            <view>图片</view>
							 | 
						|
								          </view>
							 | 
						|
								          <view class="goods" @tap="onShowSelect('goods')">
							 | 
						|
								            <image
							 | 
						|
								              class="icon"
							 | 
						|
								              :src="sheep.$url.static('/static/img/shop/chat/goods.png')"
							 | 
						|
								              mode="aspectFill"
							 | 
						|
								            ></image>
							 | 
						|
								            <view>商品</view>
							 | 
						|
								          </view>
							 | 
						|
								          <view class="order" @tap="onShowSelect('order')">
							 | 
						|
								            <image
							 | 
						|
								              class="icon"
							 | 
						|
								              :src="sheep.$url.static('/static/img/shop/chat/order.png')"
							 | 
						|
								              mode="aspectFill"
							 | 
						|
								            ></image>
							 | 
						|
								            <view>订单</view>
							 | 
						|
								          </view>
							 | 
						|
								        </template>
							 | 
						|
								      </view>
							 | 
						|
								    </view>
							 | 
						|
								  </su-popup>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script setup>
							 | 
						|
								  /**
							 | 
						|
								   * 聊天工具
							 | 
						|
								   */
							 | 
						|
								  import { emojiPage } from '@/pages/chat/util/emoji';
							 | 
						|
								  import sheep from '@/sheep';
							 | 
						|
								
							 | 
						|
								  const props = defineProps({
							 | 
						|
								    // 工具模式
							 | 
						|
								    toolsMode: {
							 | 
						|
								      type: String,
							 | 
						|
								      default: '',
							 | 
						|
								    },
							 | 
						|
								    // 控制工具菜单弹出
							 | 
						|
								    showTools: {
							 | 
						|
								      type: Boolean,
							 | 
						|
								      default: () => false,
							 | 
						|
								    },
							 | 
						|
								  });
							 | 
						|
								  const emits = defineEmits(['onEmoji', 'imageSelect', 'onShowSelect', 'close']);
							 | 
						|
								
							 | 
						|
								  // 关闭弹出工具菜单
							 | 
						|
								  function handleClose() {
							 | 
						|
								    emits('close');
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  // 选择表情
							 | 
						|
								  function onEmoji(emoji) {
							 | 
						|
								    emits('onEmoji', emoji);
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  // 选择图片
							 | 
						|
								  function imageSelect(val) {
							 | 
						|
								    emits('imageSelect', val);
							 | 
						|
								  }
							 | 
						|
								
							 | 
						|
								  // 选择商品或订单
							 | 
						|
								  function onShowSelect(mode) {
							 | 
						|
								    emits('onShowSelect', mode);
							 | 
						|
								  }
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style scoped lang="scss">
							 | 
						|
								  .content {
							 | 
						|
								    width: 100%;
							 | 
						|
								    align-content: space-around;
							 | 
						|
								    border-top: 1px solid #dfdfdf;
							 | 
						|
								    padding: 20rpx 0 0;
							 | 
						|
								
							 | 
						|
								    .emoji-swiper {
							 | 
						|
								      width: 100%;
							 | 
						|
								      height: 280rpx;
							 | 
						|
								      padding: 0 20rpx;
							 | 
						|
								
							 | 
						|
								      .emoji-img {
							 | 
						|
								        width: 50rpx;
							 | 
						|
								        height: 50rpx;
							 | 
						|
								        display: inline-block;
							 | 
						|
								        margin: 10rpx;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    .image,
							 | 
						|
								    .goods,
							 | 
						|
								    .order {
							 | 
						|
								      width: 33.3%;
							 | 
						|
								      height: 280rpx;
							 | 
						|
								      text-align: center;
							 | 
						|
								      font-size: 24rpx;
							 | 
						|
								      color: #333;
							 | 
						|
								      display: flex;
							 | 
						|
								      flex-direction: column;
							 | 
						|
								      align-items: center;
							 | 
						|
								      justify-content: center;
							 | 
						|
								
							 | 
						|
								      .icon {
							 | 
						|
								        width: 50rpx;
							 | 
						|
								        height: 50rpx;
							 | 
						|
								        margin-bottom: 21rpx;
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    :deep() {
							 | 
						|
								      .uni-file-picker__container {
							 | 
						|
								        justify-content: center;
							 | 
						|
								      }
							 | 
						|
								
							 | 
						|
								      .file-picker__box {
							 | 
						|
								        display: none;
							 | 
						|
								
							 | 
						|
								        &:last-of-type {
							 | 
						|
								          display: flex;
							 | 
						|
								        }
							 | 
						|
								      }
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								</style>
							 |