提交 fe33393f 编写于 作者: VK1688's avatar VK1688

App端新增uni.openLocation

上级 cabd9007
...@@ -31,6 +31,9 @@ ...@@ -31,6 +31,9 @@
<string>alipay</string> <string>alipay</string>
<string>safepay</string> <string>safepay</string>
<string>weixin</string> <string>weixin</string>
<string>qqmap</string>
<string>iosamap</string>
<string>baidumap</string>
</array> </array>
</dict> </dict>
</plist> </plist>
...@@ -893,7 +893,7 @@ ...@@ -893,7 +893,7 @@
} }
}, },
// #endif // #endif
// #ifdef WEB || MP-WEIXIN // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN
{ {
"path": "pages/API/open-location/open-location", "path": "pages/API/open-location/open-location",
"group": "1,9,1", "group": "1,9,1",
...@@ -902,6 +902,16 @@ ...@@ -902,6 +902,16 @@
} }
}, },
// #endif // #endif
// #ifdef APP-ANDROID || APP-IOS || WEB
{
"path": "uni_modules/uni-openLocation/pages/openLocation/openLocation",
"style": {
"navigationBarTitleText": " ",
"navigationStyle": "custom",
"disableSwipeBack": false
}
},
// #endif
// #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN
{ {
"path": "pages/API/choose-location/choose-location", "path": "pages/API/choose-location/choose-location",
...@@ -2387,7 +2397,7 @@ ...@@ -2387,7 +2397,7 @@
} }
} }
// #endif // #endif
], ],
"globalStyle": { "globalStyle": {
"pageOrientation": "portrait", "pageOrientation": "portrait",
"navigationBarTitleText": "Hello uniapp x", "navigationBarTitleText": "Hello uniapp x",
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<view class="uni-label">经度</view> <view class="uni-label">经度</view>
</view> </view>
<view class="uni-list-cell-db"> <view class="uni-list-cell-db">
<input class="uni-input" type="text" :disabled="true" value="116.39747" name="longitude" /> <input v-model.number="longitude" class="uni-input" type="text" :disabled="true" />
</view> </view>
</view> </view>
<view class="uni-list-cell"> <view class="uni-list-cell">
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
<view class="uni-label">纬度</view> <view class="uni-label">纬度</view>
</view> </view>
<view class="uni-list-cell-db"> <view class="uni-list-cell-db">
<input class="uni-input" type="text" :disabled="true" value="39.9085" name="latitude" /> <input v-model.number="latitude" class="uni-input" type="text" :disabled="true" />
</view> </view>
</view> </view>
<view class="uni-list-cell"> <view class="uni-list-cell">
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
<view class="uni-label">位置名称</view> <view class="uni-label">位置名称</view>
</view> </view>
<view class="uni-list-cell-db"> <view class="uni-list-cell-db">
<input class="uni-input" type="text" :disabled="true" value="天安门" name="name" /> <input v-model="name" class="uni-input" type="text" :disabled="true" />
</view> </view>
</view> </view>
<view class="uni-list-cell"> <view class="uni-list-cell">
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<view class="uni-label">详细位置</view> <view class="uni-label">详细位置</view>
</view> </view>
<view class="uni-list-cell-db"> <view class="uni-list-cell-db">
<input class="uni-input" type="text" :disabled="true" value="北京市东城区东长安街" name="address" /> <input v-model="address" class="uni-input" type="text" :disabled="true" />
</view> </view>
</view> </view>
</view> </view>
...@@ -51,21 +51,23 @@ ...@@ -51,21 +51,23 @@
export default { export default {
data() { data() {
return { return {
title: 'openLocation' title: 'openLocation',
longitude: 116.39747,
latitude: 39.9085,
name: '天安门',
address: '北京市东城区东长安街'
} }
}, },
onHide() { onHide() {
console.log("Page Hide"); console.log("Page Hide");
}, },
methods: { methods: {
openLocation: function (e) { openLocation: function () {
console.log(e)
var value = e.detail.value
uni.openLocation({ uni.openLocation({
longitude: Number(value.longitude), longitude: this.longitude,
latitude: Number(value.latitude), latitude: this.latitude,
name: value.name, name: this.name,
address: value.address address: this.address
}) })
} }
} }
......
## 1.0.2(2024-12-10)
ios端支持侧滑关闭
## 1.0.1(2024-12-10)
插件新增文件pages_init.json,方便注册页面
## 1.0.0(2024-12-09)
发布API uni.openLocation 需 HBuilderX 4.41+
{
"id": "uni-openLocation",
"displayName": "uni-openLocation",
"version": "1.0.2",
"description": "实现APP端的 uni.openLocation",
"keywords": [
"uni-openLocation"
],
"repository": "",
"engines": {
"HBuilderX": "^3.6.8"
},
"dcloudext": {
"type": "uts",
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "插件不采集任何数据",
"permissions": "无"
},
"npmurl": ""
},
"uni_modules": {
"dependencies": [
"uts-openSchema"
],
"uni-ext-api": {
"uni": {
"openLocation": {
"name": "openLocation",
"app": {
"js": false,
"kotlin": true,
"swift": true,
"arkts": false
}
}
}
},
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y",
"alipay": "y"
},
"client": {
"Vue": {
"vue2": "u",
"vue3": "y"
},
"App": {
"app-android": "y",
"app-ios": "y",
"app-harmony": "u"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "u",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "u",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"钉钉": "u",
"快手": "u",
"飞书": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
}
}
}
}
}
# uni-openLocation
> 需 HBuilderX 4.41+
[使用文档](https://doc.dcloud.net.cn/uni-app-x/api/open-location.html)
### 开发文档
[UTS 语法](https://uniapp.dcloud.net.cn/tutorial/syntax-uts.html)
[UTS API插件](https://uniapp.dcloud.net.cn/plugin/uts-plugin.html)
[UTS 组件插件](https://uniapp.dcloud.net.cn/plugin/uts-component.html)
[Hello UTS](https://gitcode.net/dcloud/hello-uts)
\ No newline at end of file
import { OpenLocation, OpenLocationOptions, OpenLocationSuccessImpl, OpenLocationErrorCode } from "../interface.uts"
import { OpenLocationFailImpl } from "../unierror.uts"
export const openLocation : OpenLocation = function (options : OpenLocationOptions) {
const uuid = `${Date.now()}${Math.floor(Math.random() * 1e7)}`
const baseEventName = `uni_open_location_${uuid}`
const readyEventName = `${baseEventName}_ready`
const optionsEventName = `${baseEventName}_options`
const successEventName = `${baseEventName}_success`
const failEventName = `${baseEventName}_fail`
const readyEventId = uni.$on(readyEventName, () => {
uni.$emit(optionsEventName, JSON.parse(JSON.stringify(options)))
})
const successEventId = uni.$on(successEventName, () => {
const res = new OpenLocationSuccessImpl()
options.success?.(res)
options.complete?.(res)
})
const failEventId = uni.$on(failEventName, (errCode : OpenLocationErrorCode) => {
const res = new OpenLocationFailImpl(errCode)
options.fail?.(res)
options.complete?.(res)
})
uni.openDialogPage({
url: `/uni_modules/uni-openLocation/pages/openLocation/openLocation?readyEventName=${readyEventName}&optionsEventName=${optionsEventName}&successEventName=${successEventName}&failEventName=${failEventName}`,
fail(err) {
const res = new OpenLocationFailImpl(4)
options.fail?.(res)
options.complete?.(res)
uni.$off(readyEventName, readyEventId)
uni.$off(successEventName, successEventId)
uni.$off(failEventName, failEventId)
}
})
};
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>qqmap</string>
<string>iosamap</string>
<string>baidumap</string>
</array>
</dict>
</plist>
import { OpenLocation, OpenLocationOptions, OpenLocationSuccessImpl } from "../interface.uts"
import { OpenLocationFailImpl } from "../unierror.uts"
export const openLocation : OpenLocation = function (options : OpenLocationOptions) {
const uuid = `${Date.now()}${Math.floor(Math.random() * 1e7)}`
const baseEventName = `uni_open_location_${uuid}`
const readyEventName = `${baseEventName}_ready`
const optionsEventName = `${baseEventName}_options`
const successEventName = `${baseEventName}_success`
const failEventName = `${baseEventName}_fail`
uni.$on(readyEventName, (..._ : any) => {
uni.$emit(optionsEventName, JSON.parse(JSON.stringify(options)!))
})
uni.$on(successEventName, (..._ : any) => {
const res = new OpenLocationSuccessImpl()
options.success?.(res)
options.complete?.(res)
})
uni.$on(failEventName, (..._ : any) => {
const res = new OpenLocationFailImpl(4)
options.fail?.(res)
options.complete?.(res)
})
uni.openDialogPage({
url: `/uni_modules/uni-openLocation/pages/openLocation/openLocation?readyEventName=${readyEventName}&optionsEventName=${optionsEventName}&successEventName=${successEventName}&failEventName=${failEventName}`,
fail(err) {
const res = new OpenLocationFailImpl(4)
options.fail?.(res)
options.complete?.(res)
uni.$off(readyEventName)
uni.$off(successEventName)
uni.$off(failEventName)
}
})
};
/**
* 错误码
*/
export type OpenLocationErrorCode =
/**
* 框架内部错误
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "x",
* "unixVer": "x"
* }
* }
* }
*/
4;
export interface OpenLocationSuccess {
errMsg: string
}
type OpenLocationSuccessCallback = (result : OpenLocationSuccess) => void
export interface OpenLocationFail extends IUniError {
errCode : OpenLocationErrorCode
}
type OpenLocationFailCallback = (result : OpenLocationFail) => void
export type OpenLocationComplete = any
type OpenLocationCompleteCallback = (result : OpenLocationComplete) => void
/**
* uni.openLocation函数参数定义
*/
export type OpenLocationOptions = {
/**
* 纬度,范围为-90~90,负数表示南纬,使用 gcj02 国测局坐标系
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
latitude : number,
/**
* 经度,范围为-180~180,负数表示西经,使用 gcj02 国测局坐标系
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
longitude : number,
/**
* 缩放比例,范围5~18,默认为18(微信小程序)
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
scale ?: number | null,
/**
* 位置名
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
name ?: string | null,
/**
* 地址的详细说明
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
address ?: string | null,
/**
* 接口调用成功的回调函数
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
success ?: OpenLocationSuccessCallback | null,
/**
* 接口调用失败的回调函数
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
fail ?: OpenLocationFailCallback | null,
/**
* 接口调用结束的回调函数(调用成功、失败都会执行)
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
complete ?: OpenLocationCompleteCallback | null
};
/**
* 使用应用内置地图查看位置
*
* @param {OpenLocationOptions} options
* @tutorial https://doc.dcloud.net.cn/uni-app-x/api/prompt.html#openLocation
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
export type OpenLocation = (options : OpenLocationOptions) => void;
export interface Uni {
/**
* @description 使用应用内置地图查看位置
* @example
* ```typescript
uni.openLocation({
latitude: 39.908823,
longitude: 116.39747,
success: (res) => {
console.log('res: ', res)
},
fail: (err) => {
console.log('err: ', err)
},
complete: (res) => {
console.log('complete: ', res)
}
});
* ```
* @tutorial https://doc.dcloud.net.cn/uni-app-x/api/prompt.html#openLocation
* @uniPlatform {
* "app": {
* "android": {
* "osVer": "5.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "ios": {
* "osVer": "12.0",
* "uniVer": "√",
* "unixVer": "4.41"
* },
* "harmony": {
* "osVer": "3.0",
* "uniVer": "4.23",
* "unixVer": "x"
* }
* },
* "web": {
* "uniVer": "√",
* "unixVer": "4.0"
* },
* "mp": {
* "weixin": {
* "uniVer": "√",
* "unixVer": "4.41"
* }
* }
* }
*/
openLocation(options : OpenLocationOptions) : void;
}
export class OpenLocationSuccessImpl implements OpenLocationSuccess {
errMsg : string
constructor(errMsg : string = 'chooseLocation:ok') {
this.errMsg = errMsg
}
}
import { OpenLocationErrorCode, OpenLocationFail } from "./interface.uts"
/**
* 错误主题
*/
export const UniErrorSubject = 'uni-openLocation';
/**
* 错误码
* @UniError
*/
export const UniErrors : Map<OpenLocationErrorCode, string> = new Map([
/**
* 框架内部错误
*/
[4, 'internal error']
]);
export class OpenLocationFailImpl extends UniError implements OpenLocationFail {
// #ifndef APP-IOS
override errCode : OpenLocationErrorCode;
// #endif
constructor(errCode : OpenLocationErrorCode) {
super();
this.errSubject = UniErrorSubject;
this.errCode = errCode;
this.errMsg = UniErrors.get(errCode) ?? "";
}
}
import { OpenLocation, OpenLocationOptions, OpenLocationSuccessImpl, OpenLocationErrorCode } from "../interface.uts"
import { OpenLocationFailImpl } from "../unierror.uts"
export const openLocation : OpenLocation = function (options : OpenLocationOptions) {
const uuid = `${Date.now()}${Math.floor(Math.random() * 1e7)}`
const baseEventName = `uni_open_location_${uuid}`
const readyEventName = `${baseEventName}_ready`
const optionsEventName = `${baseEventName}_options`
const successEventName = `${baseEventName}_success`
const failEventName = `${baseEventName}_fail`
const readyEventId = uni.$on(readyEventName, () => {
uni.$emit(optionsEventName, JSON.parse(JSON.stringify(options)))
})
const successEventId = uni.$on(successEventName, () => {
const res = new OpenLocationSuccessImpl()
options.success?.(res)
options.complete?.(res)
})
const failEventId = uni.$on(failEventName, (errCode : OpenLocationErrorCode) => {
const res = new OpenLocationFailImpl(errCode)
options.fail?.(res)
options.complete?.(res)
})
uni.openDialogPage({
url: `/uni_modules/uni-openLocation/pages/openLocation/openLocation?readyEventName=${readyEventName}&optionsEventName=${optionsEventName}&successEventName=${successEventName}&failEventName=${failEventName}`,
fail(err) {
const res = new OpenLocationFailImpl(4)
options.fail?.(res)
options.complete?.(res)
uni.$off(readyEventName, readyEventId)
uni.$off(successEventName, successEventId)
uni.$off(failEventName, failEventId)
}
})
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册