# MatchGroupQRcodePopup 比赛群二维码弹窗

一个用于展示比赛群二维码的弹窗组件,支持二维码展示、删除和重新上传功能。

# 引入

import PressMatchGroupQRcodePopup from 'press-next/press-match-group-q-rcode-popup/press-match-group-q-rcode-popup';

# 代码演示

# 基础用法

<template>
  <PressButton @click="show = true">
    查看比赛群二维码
  </PressButton>

  <PressMatchGroupQRcodePopup
    v-model:show="show"
    :qrcode-url="qrcodeUrl"
    :update-time="updateTime"
    @delete="handleDelete"
    @reupload="handleReupload"
    @image-error="handleImageError"
  />
</template>

<script setup>
import { ref } from 'vue';

const show = ref(false);
const qrcodeUrl = ref('https://example.com/qrcode.png');
const updateTime = ref('3月11日 10:00');

const handleDelete = () => {
  console.log('删除二维码');
  // 调用API删除二维码
};

const handleReupload = () => {
  console.log('重新上传二维码');
  // 打开文件选择器或跳转到上传页面
};

const handleImageError = () => {
  console.log('二维码图片加载失败');
  // 显示错误提示或使用默认图片
};
</script>

# 完整用法

<template>
  <PressMatchGroupQRcodePopup
    v-model:show="show"
    title="比赛交流群"
    description="扫码加入比赛交流群,获取最新赛事信息\n群二维码7天内有效,请及时保存"
    :qrcode-url="qrcodeUrl"
    :update-time="updateTime"
    :z-index="200"
    :is-round="true"
    custom-class="custom-qrcode-popup"
    @close="handleClose"
    @delete="handleDelete"
    @reupload="handleReupload"
    @image-error="handleImageError"
  >
    <!-- 自定义底部按钮 -->
    <template #foot-btn>
      <PressButton
        type="default"
        @click="handleSave"
      >
        保存图片
      </PressButton>
      <PressButton
        type="primary"
        @click="handleShare"
      >
        分享二维码
      </PressButton>
    </template>
  </PressMatchGroupQRcodePopup>
</template>

<script setup>
import { ref } from 'vue';

const show = ref(false);
const qrcodeUrl = ref('https://example.com/match-group-qrcode.png');
const updateTime = ref('2024年3月11日 10:30');

const handleClose = () => {
  console.log('弹窗关闭');
};

const handleDelete = () => {
  // 确认删除
  if (confirm('确定要删除这个二维码吗?')) {
    deleteQRCode();
  }
};

const handleReupload = () => {
  // 重新上传逻辑
  uploadNewQRCode();
};

const handleImageError = () => {
  // 图片加载失败处理
  showErrorMessage('二维码加载失败,请重试');
};

const handleSave = () => {
  // 保存图片到本地
  saveImageToLocal(qrcodeUrl.value);
};

const handleShare = () => {
  // 分享二维码
  shareQRCode(qrcodeUrl.value);
};

// API调用函数
const deleteQRCode = async () => {
  // 删除二维码的API调用
};

const uploadNewQRCode = async () => {
  // 上传新二维码的API调用
};
</script>

# API

# Props

参数 说明 类型 默认值
show 是否显示弹窗,支持 v-model boolean false
title 弹窗标题 string '比赛群二维码'
description 描述信息,支持换行符 \n string '二维码将显示在比赛主页,方便选手扫码进群\n通常有效期为7天,记得及时更新'
qrcodeUrl 二维码图片地址 string ''
updateTime 更新时间 string ''
zIndex 弹窗层级 number 100
isRound 是否显示圆角 boolean true
customClass 自定义样式类名 string ''

# Events

事件名 说明 回调参数
close 弹窗关闭时触发 -
delete 点击删除按钮时触发 -
reupload 点击重新上传按钮时触发 -
imageError 二维码图片加载失败时触发 -

# Slots

插槽名 说明 参数
foot-btn 自定义底部按钮区域 -

# Methods

通过 ref 可以调用以下方法:

方法名 说明 参数
onClose 关闭弹窗 -
onDelete 触发删除事件 -
onReupload 触发重新上传事件 -
onImageError 触发图片错误事件 -

# 样式变量

组件提供了以下 CSS 变量用于自定义样式:

# 间距系统

CSS变量 说明 默认值
--pmgq-desc-mb 描述文字下边距 $spacing-lg
--pmgq-qrcode-mb 二维码下边距 $spacing-lg
--pmgq-foot-btn-gap 底部按钮间距 .24rem

# 尺寸系统

CSS变量 说明 默认值
--pmgq-qrcode-size 二维码尺寸 2.46rem

# 颜色系统

CSS变量 说明 默认值
--pmgq-qrcode-border-color 二维码边框颜色 $color-surface-brand-light2
--pmgq-desc-text-color 描述文字颜色 $color-text-invert-default
--pmgq-time-text-color 时间文字颜色 $color-text-brand

# 字体系统

CSS变量 说明 默认值
--pmgq-desc-font-size 描述文字大小 $font-size-sm
--pmgq-time-font-size 时间文字大小 $font-size-sm

# 圆角系统

CSS变量 说明 默认值
--pmgq-qrcode-border-radius 二维码圆角 $border-radius-none

# 使用示例

/* 自定义二维码弹窗样式 */
:root {
  --pmgq-qrcode-size: 280px;
  --pmgq-qrcode-border-color: #e0e0e0;
  --pmgq-desc-text-color: #666;
  --pmgq-time-text-color: #1890ff;
  --pmgq-qrcode-border-radius: 8px;
}

/* 或者通过 customClass 覆盖 */
.custom-qrcode-popup {
  --pmgq-desc-font-size: 16px;
  --pmgq-foot-btn-gap: 16px;
}

# 使用场景

# 1. 比赛群管理

  • 展示比赛交流群二维码
  • 支持删除过期二维码
  • 支持重新上传新二维码

# 2. 二维码分享

  • 方便选手扫码入群
  • 显示二维码更新时间
  • 提供保存和分享功能

# 3. 群组管理

  • 管理员可以及时更新群二维码
  • 避免使用过期二维码
  • 提供友好的操作界面

# 注意事项

  1. 图片格式:建议使用 PNG 或 JPG 格式的二维码图片
  2. 图片大小:建议二维码图片尺寸为 200x200 像素以上
  3. 更新时间:及时更新 updateTime 以提醒用户二维码的有效性
  4. 错误处理:监听 imageError 事件处理图片加载失败的情况
  5. 小程序兼容:支持微信小程序的 virtualHost 和 styleIsolation 配置
  6. 图片安全:使用 referrerpolicy="no-referrer" 避免跨域问题

# 依赖组件

  • PressMatchPopUp: 基础弹窗组件
  • PressButton: 按钮组件