commit
1f4038fb91
14 changed files with 5610 additions and 0 deletions
-
2.gitignore
-
17App.vue
-
20index.html
-
22main.js
-
79manifest.json
-
24pages.json
-
88pages/index/index.vue
-
13uni.promisify.adaptor.js
-
76uni.scss
-
8uni_modules/vrapile-address/changelog.md
-
4915uni_modules/vrapile-address/components/vrapile-address/address-data.js
-
129uni_modules/vrapile-address/components/vrapile-address/vrapile-address.vue
-
97uni_modules/vrapile-address/package.json
-
120uni_modules/vrapile-address/readme.md
@ -0,0 +1,2 @@ |
|||
/.hbuilderx |
|||
/unpackage |
@ -0,0 +1,17 @@ |
|||
<script> |
|||
export default { |
|||
onLaunch: function() { |
|||
// console.log('App Launch') |
|||
}, |
|||
onShow: function() { |
|||
// console.log('App Show') |
|||
}, |
|||
onHide: function() { |
|||
// console.log('App Hide') |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style> |
|||
/*每个页面公共css */ |
|||
</style> |
@ -0,0 +1,20 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<script> |
|||
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || |
|||
CSS.supports('top: constant(a)')) |
|||
document.write( |
|||
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + |
|||
(coverSupport ? ', viewport-fit=cover' : '') + '" />') |
|||
</script> |
|||
<title></title> |
|||
<!--preload-links--> |
|||
<!--app-context--> |
|||
</head> |
|||
<body> |
|||
<div id="app"><!--app-html--></div> |
|||
<script type="module" src="/main.js"></script> |
|||
</body> |
|||
</html> |
@ -0,0 +1,22 @@ |
|||
import App from './App' |
|||
|
|||
// #ifndef VUE3
|
|||
import Vue from 'vue' |
|||
import './uni.promisify.adaptor' |
|||
Vue.config.productionTip = false |
|||
App.mpType = 'app' |
|||
const app = new Vue({ |
|||
...App |
|||
}) |
|||
app.$mount() |
|||
// #endif
|
|||
|
|||
// #ifdef VUE3
|
|||
import { createSSRApp } from 'vue' |
|||
export function createApp() { |
|||
const app = createSSRApp(App) |
|||
return { |
|||
app |
|||
} |
|||
} |
|||
// #endif
|
@ -0,0 +1,79 @@ |
|||
{ |
|||
"name" : "udemo-address", |
|||
"appid" : "__UNI__5CF7D8C", |
|||
"description" : "", |
|||
"versionName" : "1.0.0", |
|||
"versionCode" : "100", |
|||
"transformPx" : false, |
|||
/* 5+App特有相关 */ |
|||
"app-plus" : { |
|||
"usingComponents" : true, |
|||
"nvueStyleCompiler" : "uni-app", |
|||
"compilerVersion" : 3, |
|||
"splashscreen" : { |
|||
"alwaysShowBeforeRender" : true, |
|||
"waiting" : true, |
|||
"autoclose" : true, |
|||
"delay" : 0 |
|||
}, |
|||
/* 模块配置 */ |
|||
"modules" : {}, |
|||
/* 应用发布信息 */ |
|||
"distribute" : { |
|||
/* android打包配置 */ |
|||
"android" : { |
|||
"permissions" : [ |
|||
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", |
|||
"<uses-permission android:name=\"android.permission.VIBRATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", |
|||
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", |
|||
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.CAMERA\"/>", |
|||
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", |
|||
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", |
|||
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", |
|||
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", |
|||
"<uses-feature android:name=\"android.hardware.camera\"/>", |
|||
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" |
|||
] |
|||
}, |
|||
/* ios打包配置 */ |
|||
"ios" : {}, |
|||
/* SDK配置 */ |
|||
"sdkConfigs" : {} |
|||
} |
|||
}, |
|||
/* 快应用特有相关 */ |
|||
"quickapp" : {}, |
|||
/* 小程序特有相关 */ |
|||
"mp-weixin" : { |
|||
"appid" : "", |
|||
"setting" : { |
|||
"urlCheck" : false |
|||
}, |
|||
"usingComponents" : true |
|||
}, |
|||
"mp-alipay" : { |
|||
"usingComponents" : true |
|||
}, |
|||
"mp-baidu" : { |
|||
"usingComponents" : true |
|||
}, |
|||
"mp-toutiao" : { |
|||
"usingComponents" : true |
|||
}, |
|||
"uniStatistics" : { |
|||
"enable" : false |
|||
}, |
|||
"vueVersion" : "3", |
|||
"h5" : { |
|||
"title" : "地区选择组件", |
|||
"router" : { |
|||
"mode" : "hash", |
|||
"base" : "/udemo/address/" |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
{ |
|||
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages |
|||
{ |
|||
"path": "pages/index/index", |
|||
"style": { |
|||
"navigationBarTitleText": "地址组件样例", |
|||
"enablePullDownRefresh": false |
|||
} |
|||
} |
|||
], |
|||
"globalStyle": { |
|||
"navigationBarTextStyle": "black", |
|||
"navigationBarTitleText": "地址组件样例", |
|||
"navigationBarBackgroundColor": "#FFFFFF", |
|||
"backgroundColor": "#FFFFFF", |
|||
"h5": { |
|||
"titleNView": false, |
|||
"maxWidth": 1190, |
|||
"navigationBarTextStyle": "black", |
|||
"navigationBarBackgroundColor": "#FFFFFF" |
|||
} |
|||
}, |
|||
"uniIdRouter": {} |
|||
} |
@ -0,0 +1,88 @@ |
|||
|
|||
<template> |
|||
<view class="vrapile-content-001"> |
|||
<view class="vrapile-list-001"> |
|||
<view class="vrapile-list-001-item"> |
|||
<span class="vrapile-item-span"> |
|||
<span class="vrapile-item-span-line"></span> |
|||
选择地区 |
|||
</span> |
|||
<vrapile-address class="vrapile-item-address-picker" |
|||
:region="region1" @adress-change="addressChange1"> |
|||
{{region1.replace(/,/g, '-')}} |
|||
</vrapile-address> |
|||
</view> |
|||
<view class="vrapile-list-001-item"> |
|||
<span class="vrapile-item-span"> |
|||
<span class="vrapile-item-span-line"></span> |
|||
选择地区 |
|||
</span> |
|||
<vrapile-address class="vrapile-item-address-picker" |
|||
:region="region2" @adress-change="addressChange2"> |
|||
{{region2.replace(/,/g, ' ')}} |
|||
</vrapile-address> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
region1: "请点击选择地区", |
|||
region2: "湖北省,武汉市,江汉区" |
|||
} |
|||
}, |
|||
methods: { |
|||
addressChange1(data) { |
|||
this.region1 = data.region.join(',') |
|||
}, |
|||
addressChange2(data) { |
|||
this.region2 = data.region.join(',') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.vrapile-content-001{ |
|||
padding: 0; |
|||
margin: 0; |
|||
width: 750rpx; |
|||
height: calc(100vh - 0px); |
|||
background-color: #f1f1f1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
} |
|||
.vrapile-list-001{ |
|||
padding: 10rpx; |
|||
} |
|||
.vrapile-list-001-item{ |
|||
background-color: #fff; |
|||
margin: 10rpx 0; |
|||
padding: 20rpx; |
|||
border-radius: 10rpx; |
|||
display: flex; |
|||
} |
|||
.vrapile-item-span{ |
|||
display: flex; |
|||
align-items: center; |
|||
width: 200rpx; |
|||
} |
|||
.vrapile-item-span-line{ |
|||
display: block; |
|||
width: 5rpx; |
|||
height: 25rpx; |
|||
margin-right: 10rpx; |
|||
border-radius: 5rpx; |
|||
background-color: #2979ff; |
|||
} |
|||
.vrapile-item-address-picker{ |
|||
flex: 1; |
|||
} |
|||
</style> |
|||
|
|||
|
|||
|
|||
|
@ -0,0 +1,13 @@ |
|||
uni.addInterceptor({ |
|||
returnValue (res) { |
|||
if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) { |
|||
return res; |
|||
} |
|||
return new Promise((resolve, reject) => { |
|||
res.then((res) => { |
|||
if (!res) return resolve(res) |
|||
return res[0] ? reject(res[0]) : resolve(res[1]) |
|||
}); |
|||
}); |
|||
}, |
|||
}); |
@ -0,0 +1,76 @@ |
|||
/** |
|||
* 这里是uni-app内置的常用样式变量 |
|||
* |
|||
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 |
|||
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App |
|||
* |
|||
*/ |
|||
|
|||
/** |
|||
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 |
|||
* |
|||
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 |
|||
*/ |
|||
|
|||
/* 颜色变量 */ |
|||
|
|||
/* 行为相关颜色 */ |
|||
$uni-color-primary: #007aff; |
|||
$uni-color-success: #4cd964; |
|||
$uni-color-warning: #f0ad4e; |
|||
$uni-color-error: #dd524d; |
|||
|
|||
/* 文字基本颜色 */ |
|||
$uni-text-color:#333;//基本色 |
|||
$uni-text-color-inverse:#fff;//反色 |
|||
$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 |
|||
$uni-text-color-placeholder: #808080; |
|||
$uni-text-color-disable:#c0c0c0; |
|||
|
|||
/* 背景颜色 */ |
|||
$uni-bg-color:#ffffff; |
|||
$uni-bg-color-grey:#f8f8f8; |
|||
$uni-bg-color-hover:#f1f1f1;//点击状态颜色 |
|||
$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 |
|||
|
|||
/* 边框颜色 */ |
|||
$uni-border-color:#c8c7cc; |
|||
|
|||
/* 尺寸变量 */ |
|||
|
|||
/* 文字尺寸 */ |
|||
$uni-font-size-sm:12px; |
|||
$uni-font-size-base:14px; |
|||
$uni-font-size-lg:16px; |
|||
|
|||
/* 图片尺寸 */ |
|||
$uni-img-size-sm:20px; |
|||
$uni-img-size-base:26px; |
|||
$uni-img-size-lg:40px; |
|||
|
|||
/* Border Radius */ |
|||
$uni-border-radius-sm: 2px; |
|||
$uni-border-radius-base: 3px; |
|||
$uni-border-radius-lg: 6px; |
|||
$uni-border-radius-circle: 50%; |
|||
|
|||
/* 水平间距 */ |
|||
$uni-spacing-row-sm: 5px; |
|||
$uni-spacing-row-base: 10px; |
|||
$uni-spacing-row-lg: 15px; |
|||
|
|||
/* 垂直间距 */ |
|||
$uni-spacing-col-sm: 4px; |
|||
$uni-spacing-col-base: 8px; |
|||
$uni-spacing-col-lg: 12px; |
|||
|
|||
/* 透明度 */ |
|||
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 |
|||
|
|||
/* 文章场景相关 */ |
|||
$uni-color-title: #2C405A; // 文章标题颜色 |
|||
$uni-font-size-title:20px; |
|||
$uni-color-subtitle: #555555; // 二级标题颜色 |
|||
$uni-font-size-subtitle:26px; |
|||
$uni-color-paragraph: #3F536E; // 文章段落颜色 |
|||
$uni-font-size-paragraph:15px; |
@ -0,0 +1,8 @@ |
|||
## 1.0.3(2025-07-14) |
|||
更新项目gitea地址 |
|||
## 1.0.2(2025-07-14) |
|||
更新readme |
|||
## 1.0.1(2025-03-27) |
|||
上传示例工程 |
|||
## 1.0.0(2025-02-20) |
|||
初始化第一版 |
4915
uni_modules/vrapile-address/components/vrapile-address/address-data.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,129 @@ |
|||
<template> |
|||
<picker @change="change" @columnchange="columnchange" :range="array" |
|||
range-key="name" :value="value" mode="multiSelector"> |
|||
<slot></slot> |
|||
</picker> |
|||
</template> |
|||
|
|||
<script> |
|||
import addressData from './address-data.js' |
|||
let selectVal = ['','',''] |
|||
|
|||
export default { |
|||
name: 'vrapileAddress', |
|||
props:{ |
|||
region:{ |
|||
type: String, |
|||
default: "请点击选择地区" |
|||
} |
|||
}, |
|||
data() { |
|||
return{ |
|||
value: [0,0,0], |
|||
array: [], |
|||
index: 0 |
|||
} |
|||
}, |
|||
created() { |
|||
let input = this.region.split(','); |
|||
if(input.length == 3){ |
|||
addressData.forEach((item, index, arr) => { |
|||
if(item.name == input[0]){ |
|||
this.value[0] = index; |
|||
} |
|||
}) |
|||
addressData[this.value[0]].city.forEach((item, index, arr) => { |
|||
if(item.name == input[1]){ |
|||
this.value[1] = index; |
|||
} |
|||
}) |
|||
addressData[this.value[0]].city[this.value[1]].area.forEach((item, index, arr) => { |
|||
if(item == input[2]){ |
|||
this.value[2] = index; |
|||
} |
|||
}) |
|||
} |
|||
this.initSelect(); |
|||
}, |
|||
methods:{ |
|||
/** |
|||
* 初始化地址选项 |
|||
* */ |
|||
initSelect() { |
|||
this.updateSourceData() // 更新源数据 |
|||
.updateAddressData() // 更新结果数据 |
|||
}, |
|||
|
|||
/** |
|||
* 更新索引 |
|||
* */ |
|||
updateSelectIndex(column, value){ |
|||
let arr = JSON.parse(JSON.stringify(this.value)) |
|||
arr[column] = value |
|||
if(column === 0 ) { |
|||
arr[1] = 0 |
|||
arr[2] = 0 |
|||
} |
|||
if(column === 1 ) { |
|||
arr[2] = 0 |
|||
} |
|||
this.value = arr |
|||
return this |
|||
}, |
|||
|
|||
/** |
|||
* 更新源数据 |
|||
* */ |
|||
updateSourceData() { |
|||
this.array = [] |
|||
this.array[0] = addressData.map(obj => { |
|||
return { |
|||
name: obj.name |
|||
} |
|||
}) |
|||
this.array[1] = addressData[this.value[0]].city.map(obj => { |
|||
return { |
|||
name: obj.name |
|||
} |
|||
}) |
|||
this.array[2] = addressData[this.value[0]].city[this.value[1]].area.map(obj => { |
|||
return { |
|||
name: obj |
|||
} |
|||
}) |
|||
return this |
|||
}, |
|||
|
|||
/** |
|||
* 更新结果数据 |
|||
* */ |
|||
updateAddressData() { |
|||
selectVal[0] = this.array[0][this.value[0]].name |
|||
selectVal[1] = this.array[1][this.value[1]].name |
|||
selectVal[2] = this.array[2][this.value[2]].name |
|||
return this |
|||
}, |
|||
|
|||
/** |
|||
* 地址控件改变控件 |
|||
* */ |
|||
columnchange(d) { |
|||
this.updateSelectIndex(d.detail.column, d.detail.value) // 更新选择索引 |
|||
.updateSourceData() // 更新源数据 |
|||
.updateAddressData() // 更新结果数据 |
|||
}, |
|||
|
|||
/** |
|||
* 地址改变事件 |
|||
* */ |
|||
change(e) { |
|||
this.$emit('adress-change', { |
|||
index: this.value, |
|||
region: selectVal |
|||
}) |
|||
return this |
|||
} |
|||
|
|||
} |
|||
} |
|||
</script> |
@ -0,0 +1,97 @@ |
|||
{ |
|||
"id": "vrapile-address", |
|||
"displayName": "区域地址选择组件", |
|||
"version": "1.0.3", |
|||
"description": "区域地址选择,兼容vue2/vue3、完全兼容App/H5/微信小程序,易二次开发", |
|||
"keywords": [ |
|||
"区域地址选择" |
|||
], |
|||
"repository": "https://git.ninecloud.top/yuanlei/udemo-address.git", |
|||
"engines": { |
|||
"HBuilderX": "^3.1.0", |
|||
"uni-app": "^4.06", |
|||
"uni-app-x": "^4.06" |
|||
}, |
|||
"dcloudext": { |
|||
"type": "component-vue", |
|||
"sale": { |
|||
"regular": { |
|||
"price": "0.00" |
|||
}, |
|||
"sourcecode": { |
|||
"price": "0.00" |
|||
} |
|||
}, |
|||
"contact": { |
|||
"qq": "642678614" |
|||
}, |
|||
"declaration": { |
|||
"ads": "无", |
|||
"data": "插件不采集任何数据", |
|||
"permissions": "无" |
|||
}, |
|||
"npmurl": "", |
|||
"darkmode": "x", |
|||
"i18n": "√", |
|||
"widescreen": "√" |
|||
}, |
|||
"uni_modules": { |
|||
"dependencies": [], |
|||
"encrypt": [], |
|||
"platforms": { |
|||
"cloud": { |
|||
"tcb": "√", |
|||
"aliyun": "√", |
|||
"alipay": "√" |
|||
}, |
|||
"client": { |
|||
"uni-app": { |
|||
"vue": { |
|||
"vue2": "√", |
|||
"vue3": "√" |
|||
}, |
|||
"web": { |
|||
"safari": "√", |
|||
"chrome": "√" |
|||
}, |
|||
"app": { |
|||
"vue": "√", |
|||
"nvue": "√", |
|||
"android": "√", |
|||
"ios": "√", |
|||
"harmony": "√" |
|||
}, |
|||
"mp": { |
|||
"weixin": "√", |
|||
"alipay": "√", |
|||
"toutiao": "√", |
|||
"baidu": "√", |
|||
"kuaishou": "√", |
|||
"jd": "√", |
|||
"harmony": "√", |
|||
"qq": "√", |
|||
"lark": "√" |
|||
}, |
|||
"quickapp": { |
|||
"huawei": "√", |
|||
"union": "√" |
|||
} |
|||
}, |
|||
"uni-app-x": { |
|||
"web": { |
|||
"safari": "√", |
|||
"chrome": "√" |
|||
}, |
|||
"app": { |
|||
"android": "√", |
|||
"ios": "√", |
|||
"harmony": "√" |
|||
}, |
|||
"mp": { |
|||
"weixin": "√" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
@ -0,0 +1,120 @@ |
|||
## 引用样例 |
|||
|
|||
|
|||
``` javascript |
|||
<template> |
|||
<view class="vrapile-content-001"> |
|||
<view class="vrapile-list-001"> |
|||
<view class="vrapile-list-001-item"> |
|||
<span class="vrapile-item-span"> |
|||
<span class="vrapile-item-span-line"></span> |
|||
选择地区 |
|||
</span> |
|||
<vrapile-address class="vrapile-item-address-picker" |
|||
:region="region1" @adress-change="addressChange1"> |
|||
{{region1.replace(/,/g, '-')}} |
|||
</vrapile-address> |
|||
</view> |
|||
<view class="vrapile-list-001-item"> |
|||
<span class="vrapile-item-span"> |
|||
<span class="vrapile-item-span-line"></span> |
|||
选择地区 |
|||
</span> |
|||
<vrapile-address class="vrapile-item-address-picker" |
|||
:region="region2" @adress-change="addressChange2"> |
|||
{{region2.replace(/,/g, ' ')}} |
|||
</vrapile-address> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
region1: "请点击选择地区", |
|||
region2: "湖北省,武汉市,江汉区" |
|||
} |
|||
}, |
|||
methods: { |
|||
addressChange1(data) { |
|||
this.region1 = data.region.join(',') |
|||
}, |
|||
addressChange2(data) { |
|||
this.region2 = data.region.join(',') |
|||
} |
|||
} |
|||
} |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.vrapile-content-001{ |
|||
padding: 0; |
|||
margin: 0; |
|||
width: 750rpx; |
|||
height: calc(100vh - 0px); |
|||
background-color: #f1f1f1; |
|||
display: flex; |
|||
flex-direction: column; |
|||
} |
|||
.vrapile-list-001{ |
|||
padding: 10rpx; |
|||
} |
|||
.vrapile-list-001-item{ |
|||
background-color: #fff; |
|||
margin: 10rpx 0; |
|||
padding: 20rpx; |
|||
border-radius: 10rpx; |
|||
display: flex; |
|||
} |
|||
.vrapile-item-span{ |
|||
display: flex; |
|||
align-items: center; |
|||
width: 200rpx; |
|||
} |
|||
.vrapile-item-span-line{ |
|||
display: block; |
|||
width: 5rpx; |
|||
height: 25rpx; |
|||
margin-right: 10rpx; |
|||
border-radius: 5rpx; |
|||
background-color: #2979ff; |
|||
} |
|||
.vrapile-item-address-picker{ |
|||
flex: 1; |
|||
} |
|||
</style> |
|||
``` |
|||
<br > |
|||
|
|||
|
|||
## 功能说明 |
|||
|
|||
|
|||
* 入参 *region* :必传,没有初始值传提示语,有初始值传初始值 |
|||
``` javascript |
|||
如: |
|||
region1: "请点击选择地区", |
|||
region2: "湖北省,武汉市,江汉区" |
|||
``` |
|||
|
|||
* 回调函数 *adress-change* :地址选择完成触发,内容是Json数据体 |
|||
``` javascript |
|||
index: 索引列表, region: 区域列表 |
|||
|
|||
完整Json样例: |
|||
{"index": [16, 0, 2], "region": ["湖北省", "武汉市", "江汉区"]} |
|||
``` |
|||
<br > |
|||
|
|||
## 演示说明 |
|||
以下所有工程共用一个后端,账号互通 |
|||
<font color="gray">( *皆可用访客账号/密码:visitor/visitor* )</font> |
|||
|
|||
演示Demo: |
|||
<a href="https://www.ninecloud.top/udemo/address/index.html" target="_blank">https://www.ninecloud.top/udemo/address/index.html</a> |
|||
|
|||
演示H5:<font color="gray">*云山有果*</font> |
|||
|
|||
<img src="https://fs.ninecloud.top/uniapp/ufruit/qrcode.png" width="300"> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue