167 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Vue
		
	
	
<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>
 |