更新记录

1.0.1(2026-02-21)

优化源码授权

1.0.0(2026-02-21)


平台兼容性

uni-app(3.6.17)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

通讯录选择器组件 xtf-contact-picker

📱 简介

一个简洁的通讯录选择器组件,打开系统通讯录选择联系人,返回原始数据。只做一件事:选择联系人并返回,所有业务逻辑(重复判断、数据过滤)都由使用方处理。

💰 价格说明

项目 说明
价格 20元(一次性购买,永久使用)
购买权益 ① 插件源码永久使用权 ② 后续版本免费更新 ③ 基础技术支持
退款政策 购买后7天内未下载源码可申请退款
试用说明 支持在自定义基座无限期调试,正式打包需购买

✨ 功能特点

  • 打开系统通讯录选择联系人 - Android系统原生界面
  • 搜索过滤 - 支持按姓名、电话实时搜索
  • 返回原始数据 - 电话是啥就是啥,不做任何格式化处理
  • 自动权限处理 - 自动请求通讯录权限
  • 自定义触发按钮 - 支持插槽自定义样式
  • 轻量级 - 无额外依赖,开箱即用

📋 平台兼容性

平台 支持情况 说明
HBuilderX ✅ 支持 3.5.0+
Vue版本 ✅ Vue2 / Vue3 -
App - Android ✅ 支持 5.0+(已测试)
App - iOS ⚠️ 待测试 plus.contacts API理论上支持,待用户反馈
小程序/H5 ❌ 不支持 -

⚠️ 注意:iOS端暂未真机测试,基于plus.contacts实现理论可用。如遇问题请在评论区反馈。

🚀 快速上手

1. 购买导入

购买后可在HBuilderX中直接导入,或下载ZIP解压到 uni_modules 目录。

2. 配置权限

manifest.json 中配置通讯录权限:

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>"
        ]
      },
      "ios": {
        "plist": {
          "NSContactsUsageDescription": "需要访问通讯录以选择联系人"
        }
      }
    }
  }
}

3. 在页面中使用

<template>
  <view>
    <!-- 基础用法 -->
    <xtf-contact-picker @onSelect="handleSelect" />

    <!-- 自定义触发按钮 -->
    <xtf-contact-picker @onSelect="handleSelect">
      <template #trigger>
        <button class="my-btn">📱 从通讯录选择</button>
      </template>
    </xtf-contact-picker>
  </view>
</template>

<script>
import xtfContactPicker from '@/uni_modules/xtf-contact-picker/components/xtf-contact-picker/xtf-contact-picker.vue'

export default {
  components: { xtfContactPicker },
  methods: {
    handleSelect(contact) {
      console.log('选择的联系人:', contact)  // 返回原始数据
      // 业务逻辑:检查重复、添加等由您自己处理
      // 例如:
      // if (this.contacts.some(c => c.phone === contact.phone)) {
      //   uni.showToast({ title: '联系人已存在', icon: 'none' })
      //   return
      // }
      // this.contacts.push({ id: Date.now(), ...contact })
    }
  }
}
</script>

📚 API文档

Props

参数 类型 默认值 说明
title String '选择联系人' 弹窗标题
searchPlaceholder String '搜索姓名或电话' 搜索框占位符
selectButtonText String '选择' 选择按钮文字
loadingText String '加载中...' 加载中提示
emptyText String '通讯录暂无联系人' 空状态提示
autoClose Boolean true 选择后自动关闭

Events

事件名 说明 返回值
@onSelect 选择联系人时触发 { id, name, phone, type }(电话原始格式)
@onCancel 取消选择时触发 -
@onError 发生错误时触发 错误信息字符串

Methods

方法名 说明
openPicker 打开选择器
closePicker 关闭选择器

Slots

插槽名 说明
trigger 自定义触发按钮

🔐 权限说明

  • Android:android.permission.READ_CONTACTS
  • iOS:NSContactsUsageDescription

组件已内置权限请求逻辑,无需额外代码。

⚠️ 注意事项

  1. 平台限制:仅支持App平台(Android已测试,iOS理论支持)
  2. 数据处理:插件不做任何电话格式化,返回原始数据,所有业务逻辑由使用方处理
  3. 重复判断:插件不判断联系人是否已存在,需在使用方自行处理
  4. 提示控制:插件内部无任何toast提示,所有提示由使用方控制

❓ 常见问题

Q:iOS能用吗?
A:基于plus.contacts API实现,理论可用。暂未真机测试,欢迎反馈。

Q:电话会格式化吗?
A:不会,返回原始电话格式,是啥就是啥。

Q:会提示选择成功吗?
A:不会,插件内部没有任何提示,您可以在父页面按需提示。

📝 更新日志

1.0.0 (2026-02-21)

  • 🎉 首次发布
  • ✨ 支持Android系统通讯录选择
  • 🔍 支持搜索过滤
  • 🔐 自动权限处理
  • 🎨 支持自定义触发按钮

📞 联系作者

  • 邮箱:您的邮箱@example.com
  • 评论区:可直接留言反馈

如果对您有帮助,请给个5星好评 ⭐⭐⭐⭐⭐

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android:android.permission.READ_CONTACTS(读取通讯录)

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

不采集任何数据,所有操作在本地完成

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。