提交 5679e5ba 编写于 作者: D DCloud_LXH

fix(app): 修复 重复添加联系人的Bug https://gitee.com/dcloud/uni-app/issues/I4NY6C

上级 2ff036e3
export const addPhoneContact = {
firstName: {
type: String,
required: true,
validator (firstName) {
if (!firstName) {
return 'addPhoneContact:fail parameter error: parameter.firstName should not be empty String;'
}
}
}
}
......@@ -2,217 +2,136 @@ import {
invoke
} from '../../bridge'
export function addPhoneContact ({
photoFilePath = '',
nickName,
lastName,
middleName,
firstName,
remark,
mobilePhoneNumber,
weChatNumber,
addressCountry,
addressState,
addressCity,
addressStreet,
addressPostalCode,
organization,
title,
workFaxNumber,
workPhoneNumber,
hostNumber,
email,
url,
workAddressCountry,
workAddressState,
workAddressCity,
workAddressStreet,
workAddressPostalCode,
homeFaxNumber,
homePhoneNumber,
homeAddressCountry,
homeAddressState,
homeAddressCity,
homeAddressStreet,
homeAddressPostalCode
} = {}, callbackId) {
plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, (addressbook) => {
const contact = addressbook.create()
const name = {}
if (lastName) {
name.familyName = lastName
}
if (firstName) {
name.givenName = firstName
}
if (middleName) {
name.middleName = middleName
}
contact.name = name
if (nickName) {
contact.nickname = nickName
}
if (photoFilePath) {
contact.photos = [{
type: 'url',
value: photoFilePath
}]
}
if (remark) {
contact.note = remark
}
const mobilePhone = {
type: 'mobile'
}
const workPhone = {
type: 'work'
}
const companyPhone = {
type: 'company'
}
const homeFax = {
type: 'home fax'
}
const workFax = {
type: 'work fax'
}
if (mobilePhoneNumber) {
mobilePhone.value = mobilePhoneNumber
}
if (workPhoneNumber) {
workPhone.value = workPhoneNumber
}
if (hostNumber) {
companyPhone.value = hostNumber
}
if (homeFaxNumber) {
homeFax.value = homeFaxNumber
}
if (workFaxNumber) {
workFax.value = workFaxNumber
}
contact.phoneNumbers = [mobilePhone, workPhone, companyPhone, homeFax, workFax]
if (email) {
contact.emails = [{
type: 'home',
value: email
}]
}
if (url) {
contact.urls = [{
type: 'other',
value: url
}]
}
const org = {
type: 'company'
}
if (organization) {
org.name = organization
}
if (title) {
org.title = title
}
if (weChatNumber) {
contact.ims = [{
type: 'other',
value: weChatNumber
}]
}
const defaultAddress = {
const schema = {
name: {
givenName: 'firstName',
middleName: 'middleName',
familyName: 'lastName',
},
nickname: 'nickName',
photos: {
type: 'url',
value: 'photoFilePath'
},
note: 'remark',
phoneNumbers: [
{
type: 'mobile',
value: 'mobilePhoneNumber'
},
{
type: 'work',
value: 'workPhoneNumber'
},
{
type: 'company',
value: 'hostNumber'
},
{
type: 'home fax',
value: 'homeFaxNumber'
},
{
type: 'work fax',
value: 'workFaxNumber'
}
],
emails: [{
type: 'home',
value: 'email'
}],
urls: [{
type: 'other',
value: 'url'
}],
organizations: [{
type: 'company',
name: 'organization',
title: 'title'
}],
ims: [{
type: 'other',
value: 'weChatNumber'
}],
addresses: [
{
type: 'other',
preferred: true
}
const homeAddress = {
type: 'home'
}
const companyAddress = {
type: 'company'
}
if (addressCountry) {
defaultAddress.country = addressCountry
}
if (addressState) {
defaultAddress.region = addressState
}
if (addressCity) {
defaultAddress.locality = addressCity
}
if (addressStreet) {
defaultAddress.streetAddress = addressStreet
}
if (addressPostalCode) {
defaultAddress.postalCode = addressPostalCode
}
if (homeAddressCountry) {
homeAddress.country = homeAddressCountry
}
if (homeAddressState) {
homeAddress.region = homeAddressState
}
if (homeAddressCity) {
homeAddress.locality = homeAddressCity
}
if (homeAddressStreet) {
homeAddress.streetAddress = homeAddressStreet
}
if (homeAddressPostalCode) {
homeAddress.postalCode = homeAddressPostalCode
}
if (workAddressCountry) {
companyAddress.country = workAddressCountry
}
if (workAddressState) {
companyAddress.region = workAddressState
}
if (workAddressCity) {
companyAddress.locality = workAddressCity
}
if (workAddressStreet) {
companyAddress.streetAddress = workAddressStreet
}
preferred: true,
country: 'addressCountry',
region: 'addressState',
locality: 'addressCity',
streetAddress: 'addressStreet',
postalCode: 'addressPostalCode'
},
{
type: 'home',
country: 'homeAddressCountry',
region: 'homeAddressState',
locality: 'homeAddressCity',
streetAddress: 'homeAddressStreet',
postalCode: 'homeAddressPostalCode'
},
{
type: 'company',
country: 'workAddressCountry',
region: 'workAddressState',
locality: 'workAddressCity',
streetAddress: 'workAddressStreet',
postalCode: 'workAddressPostalCode'
}
]
}
if (workAddressPostalCode) {
companyAddress.postalCode = workAddressPostalCode
const keepFields = ['type', 'preferred']
function buildContact(contact, data, schema) {
let hasValue = 0
Object.keys(schema).forEach(contactKey => {
const dataKey = schema[contactKey]
const typed = typeof dataKey
if (typed !== 'object') {
if (keepFields.indexOf(contactKey) !== -1) {
contact[contactKey] = schema[contactKey]
} else {
if (typeof data[dataKey] !== 'undefined') {
hasValue++
contact[contactKey] = data[dataKey]
} else {
delete contact[contactKey]
}
}
} else {
if (dataKey instanceof Array) {
contact[contactKey] = []
dataKey.forEach(item => {
const obj = {}
if (buildContact(obj, data, item)) {
contact[contactKey].push(obj)
}
})
if (!contact[contactKey].length) {
delete contact[contactKey]
} else {
hasValue++
}
} else {
contact[contactKey] = {}
if (buildContact(contact[contactKey], data, dataKey)) {
hasValue++
} else {
delete contact[contactKey]
}
}
}
})
return hasValue
}
contact.addresses = [defaultAddress, homeAddress, companyAddress]
export function addPhoneContact(data, callbackId) {
plus.contacts.getAddressBook(plus.contacts.ADDRESSBOOK_PHONE, (addressbook) => {
!data.photoFilePath && (data.photoFilePath = '')
const contact = addressbook.create()
buildContact(contact, data, schema)
contact.save(() => {
invoke(callbackId, {
errMsg: 'addPhoneContact:ok'
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册