提交 dd274ccf 编写于 作者: D DCloud_LXH
上级 a8fb01b3
export const API_ADD_PHONE_CONTACT = 'addPhoneContact'
export type API_TYPE_ADD_PHONE_CONTACT = typeof uni.addPhoneContact
export const AddPhoneContactOptions: ApiOptions<API_TYPE_ADD_PHONE_CONTACT> = {
formatArgs: {
firstName(firstName) {
if (!firstName)
return 'addPhoneContact:fail parameter error: parameter.firstName should not be empty;'
},
},
}
export const AddPhoneContactProtocol: ApiProtocol<API_TYPE_ADD_PHONE_CONTACT> =
{
firstName: {
type: String,
required: true,
},
photoFilePath: String,
nickName: String,
lastName: String,
middleName: String,
firstName: String,
remark: String,
mobilePhoneNumber: String,
weChatNumber: String,
......
......@@ -2,260 +2,174 @@ import {
API_ADD_PHONE_CONTACT,
API_TYPE_ADD_PHONE_CONTACT,
defineAsyncApi,
MakePhoneCallProtocol,
AddPhoneContactProtocol,
AddPhoneContactOptions,
} from '@dcloudio/uni-api'
export const addPhoneContact = defineAsyncApi<API_TYPE_ADD_PHONE_CONTACT>(
API_ADD_PHONE_CONTACT,
(
type Schema = Record<
Exclude<
keyof PlusContactsContact,
| 'id'
| 'displayName'
| 'birthday'
| 'categories'
| 'clone'
| 'remove'
| 'save'
>,
any
>
const schema: 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',
},
{
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,
type: 'company',
value: 'hostNumber',
},
{ resolve, reject }
) => {
{
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,
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',
},
],
}
const keepFields = ['type', 'preferred']
function buildContact(contact: any, data: any, schema: any) {
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
}
export const addPhoneContact = defineAsyncApi<API_TYPE_ADD_PHONE_CONTACT>(
API_ADD_PHONE_CONTACT,
(data, { resolve, reject }) => {
!data.photoFilePath && (data.photoFilePath = '')
plus.contacts.getAddressBook(
plus.contacts.ADDRESSBOOK_PHONE,
(addressbook) => {
const contact = addressbook.create()
const name: any = {}
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 as any).photos = [
{
type: 'url',
value: photoFilePath,
},
]
}
if (remark) {
contact.note = remark
}
const mobilePhone: any = {
type: 'mobile',
}
const workPhone: any = {
type: 'work',
}
const companyPhone: any = {
type: 'company',
}
const homeFax: any = {
type: 'home fax',
}
const workFax: any = {
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 as any).phoneNumbers = [
mobilePhone,
workPhone,
companyPhone,
homeFax,
workFax,
]
if (email) {
;(contact as any).emails = [
{
type: 'home',
value: email,
},
]
}
if (url) {
;(contact as any).urls = [
{
type: 'other',
value: url,
},
]
}
const org: any = {
type: 'company',
}
if (organization) {
org.name = organization
}
if (title) {
org.title = title
}
if (weChatNumber) {
;(contact as any).ims = [
{
type: 'other',
value: weChatNumber,
},
]
}
const defaultAddress: any = {
type: 'other',
preferred: true,
}
const homeAddress: any = {
type: 'home',
}
const companyAddress: any = {
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
}
if (workAddressPostalCode) {
companyAddress.postalCode = workAddressPostalCode
}
;(contact as any).addresses = [
defaultAddress,
homeAddress,
companyAddress,
]
buildContact(contact, data, schema)
contact.save(
() => {
resolve({
errMsg: 'addPhoneContact:ok',
})
},
(e) => {
reject('addPhoneContact:fail')
}
() => resolve(),
(e) => reject()
)
},
(e) => {
reject('addPhoneContact:fail')
}
(e) => reject()
)
},
MakePhoneCallProtocol
AddPhoneContactProtocol,
AddPhoneContactOptions
)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册