diff --git a/Info.plist b/Info.plist
index 5ae921429ed7b4d41bc09d80dc5a094e226288b3..a6513623a2e1ee7c4c650665d1522b38c919b137 100644
--- a/Info.plist
+++ b/Info.plist
@@ -31,6 +31,9 @@
alipay
safepay
weixin
+ qqmap
+ iosamap
+ baidumap
diff --git a/pages.json b/pages.json
index 7a0eee0a86635913e3249624ccf8315ae27ad0b3..2399306fdc8977f08d34dad54159b6b7e92074d9 100644
--- a/pages.json
+++ b/pages.json
@@ -893,7 +893,7 @@
}
},
// #endif
- // #ifdef WEB || MP-WEIXIN
+ // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN
{
"path": "pages/API/open-location/open-location",
"group": "1,9,1",
@@ -902,6 +902,16 @@
}
},
// #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
{
"path": "pages/API/choose-location/choose-location",
@@ -2387,7 +2397,7 @@
}
}
// #endif
- ],
+],
"globalStyle": {
"pageOrientation": "portrait",
"navigationBarTitleText": "Hello uniapp x",
diff --git a/pages/API/open-location/open-location.uvue b/pages/API/open-location/open-location.uvue
index 1fb7386fdfef3348118073ed621d96a6193826a4..bd9d1dc7057aa3bbd8cf2040d6f2c766cc4c3137 100644
--- a/pages/API/open-location/open-location.uvue
+++ b/pages/API/open-location/open-location.uvue
@@ -9,7 +9,7 @@
经度
-
+
@@ -17,7 +17,7 @@
纬度
-
+
@@ -25,7 +25,7 @@
位置名称
-
+
@@ -33,7 +33,7 @@
详细位置
-
+
@@ -51,21 +51,23 @@
export default {
data() {
return {
- title: 'openLocation'
+ title: 'openLocation',
+ longitude: 116.39747,
+ latitude: 39.9085,
+ name: '天安门',
+ address: '北京市东城区东长安街'
}
},
onHide() {
console.log("Page Hide");
},
methods: {
- openLocation: function (e) {
- console.log(e)
- var value = e.detail.value
+ openLocation: function () {
uni.openLocation({
- longitude: Number(value.longitude),
- latitude: Number(value.latitude),
- name: value.name,
- address: value.address
+ longitude: this.longitude,
+ latitude: this.latitude,
+ name: this.name,
+ address: this.address
})
}
}
diff --git a/uni_modules/uni-openLocation/changelog.md b/uni_modules/uni-openLocation/changelog.md
new file mode 100644
index 0000000000000000000000000000000000000000..e296ac6e3e55ad8a1936f3c51c5d674411ad3665
--- /dev/null
+++ b/uni_modules/uni-openLocation/changelog.md
@@ -0,0 +1,6 @@
+## 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+
diff --git a/uni_modules/uni-openLocation/package.json b/uni_modules/uni-openLocation/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..4f0a0d4c51d1bd40eb1fc9baecdf65411eaf25f9
--- /dev/null
+++ b/uni_modules/uni-openLocation/package.json
@@ -0,0 +1,98 @@
+{
+ "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"
+ }
+ }
+ }
+ }
+}
diff --git a/uni_modules/uni-openLocation/pages/openLocation/openLocation.uvue b/uni_modules/uni-openLocation/pages/openLocation/openLocation.uvue
new file mode 100644
index 0000000000000000000000000000000000000000..48f9bee2e2452b4aaa1075e9f6e7854053e562eb
--- /dev/null
+++ b/uni_modules/uni-openLocation/pages/openLocation/openLocation.uvue
@@ -0,0 +1,527 @@
+
+
+
+
+
+ {{ icon.position }}
+
+
+
+ {{ icon.back }}
+
+
+
+
+
+
+
+
diff --git a/uni_modules/uni-openLocation/readme.md b/uni_modules/uni-openLocation/readme.md
new file mode 100644
index 0000000000000000000000000000000000000000..9382356a2ba0c3fa6279262b7f4b458e4d8e8303
--- /dev/null
+++ b/uni_modules/uni-openLocation/readme.md
@@ -0,0 +1,11 @@
+# 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
diff --git a/uni_modules/uni-openLocation/static/target.png b/uni_modules/uni-openLocation/static/target.png
new file mode 100644
index 0000000000000000000000000000000000000000..8c138822dadc02bf6bde61ca020e30c39fda35b7
Binary files /dev/null and b/uni_modules/uni-openLocation/static/target.png differ
diff --git a/uni_modules/uni-openLocation/utssdk/app-android/index.uts b/uni_modules/uni-openLocation/utssdk/app-android/index.uts
new file mode 100644
index 0000000000000000000000000000000000000000..3f14b685466e65c7f1fb1053530f028e5b7ba2f5
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/app-android/index.uts
@@ -0,0 +1,36 @@
+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)
+ }
+ })
+};
diff --git a/uni_modules/uni-openLocation/utssdk/app-ios/Info.plist b/uni_modules/uni-openLocation/utssdk/app-ios/Info.plist
new file mode 100644
index 0000000000000000000000000000000000000000..0ac851285e7a6ee4b6a1783dbe2c9be8289a190d
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/app-ios/Info.plist
@@ -0,0 +1,14 @@
+
+
+
+
+
+ LSApplicationQueriesSchemes
+
+ qqmap
+ iosamap
+ baidumap
+
+
+
+
diff --git a/uni_modules/uni-openLocation/utssdk/app-ios/index.uts b/uni_modules/uni-openLocation/utssdk/app-ios/index.uts
new file mode 100644
index 0000000000000000000000000000000000000000..781339cb01cdfe67ed16408755b5c0b2634b5dc4
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/app-ios/index.uts
@@ -0,0 +1,36 @@
+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)
+ }
+ })
+};
diff --git a/uni_modules/uni-openLocation/utssdk/interface.uts b/uni_modules/uni-openLocation/utssdk/interface.uts
new file mode 100644
index 0000000000000000000000000000000000000000..ec285dfbf639653bf207dc5db6f409c9ad655189
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/interface.uts
@@ -0,0 +1,418 @@
+/**
+ * 错误码
+ */
+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
+ }
+}
diff --git a/uni_modules/uni-openLocation/utssdk/unierror.uts b/uni_modules/uni-openLocation/utssdk/unierror.uts
new file mode 100644
index 0000000000000000000000000000000000000000..e188281315eec543f32d1184309f9101359feb82
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/unierror.uts
@@ -0,0 +1,30 @@
+import { OpenLocationErrorCode, OpenLocationFail } from "./interface.uts"
+
+/**
+ * 错误主题
+ */
+
+export const UniErrorSubject = 'uni-openLocation';
+
+/**
+ * 错误码
+ * @UniError
+ */
+export const UniErrors : Map = 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) ?? "";
+ }
+}
diff --git a/uni_modules/uni-openLocation/utssdk/web/index.uts b/uni_modules/uni-openLocation/utssdk/web/index.uts
new file mode 100644
index 0000000000000000000000000000000000000000..7694f6511f9840eb157377144a71bba5dd593785
--- /dev/null
+++ b/uni_modules/uni-openLocation/utssdk/web/index.uts
@@ -0,0 +1,36 @@
+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)
+ }
+ })
+};