提交 ee8f1922 编写于 作者: L linju

123

{
"router":{
"needLogin":[
"/pages/ucenter/edit/edit"
"/pages/ucenter/edit/edit",
"/uni_modules/uni-login-page/pages/index/pwd-retrieve"
]
},
"aboutus":{
"appName":"base-app",
"company":"数字天堂(北京)网络技术有限公司",
"slogan":"为开发而生",
"agreement":{
"privacy":"https://uniapp.dcloud.io/",
"business":"https://uniapp.dcloud.io/"
}
}
}
\ No newline at end of file
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import checkUpdate from '@/uni_modules/uni-upgrade-center-app/utils/check-update';
import baseappConfig from '@/baseapp.config.json';
export default function() {
// 初始化appVersion
......@@ -8,11 +9,50 @@ export default function() {
checkUpdate();
//自定义路由拦截
setRouter()
const {"router":{needLogin}} = baseappConfig //需要登陆的页面
changeAction(["navigateTo", "redirectTo", "reLaunch", "switchTab"], {
before_action: e => {
let token = uni.getStorageSync('uni-id-token')
if (needLogin.includes(e.url) && token == '') {
console.log('该页面需要登陆,即将跳转到login页面');
uni.showToast({title:'该页面需要登陆,即将跳转到login页面',icon:'none'})
uni.redirectTo({
url:"/uni_modules/uni-login-page/pages/index/index"
})
return false
}
return true
}
})
//提示网络变化
eventListenerNetwork()
/*
当某个权限调用失败
1.先检测手机的该模块是否打开
2.检测当前应用是否被授权了该模块对应的权限
提示,并点击跳转到设置
*/
// #ifndef H5
// changeAction('chooseImage', {
// after_action: e => {
// console.log('changeAction', e);
// if(e.errCode === 11){
// uni.showModal({
// content: '无权限',
// confirmText:"前往设置",
// success(e) {
// if(e.confirm){
// permision.gotoAppPermissionSetting()
// }
// }
// });
// }
// }
// })
// #endif
}
/**
* // 初始化appVersion
......@@ -34,44 +74,6 @@ function initAppVersion() {
});
// #endif
}
//用于拦截路由
import baseappConfig from '@/baseapp.config.json';
console.log('baseappConfig',baseappConfig);
const {"router":{needLogin}} = baseappConfig //需要登陆的页面
function setRouter() {
let before_action = e => {
let res = true
let token = uni.getStorageSync('uni-id-token')
if (needLogin.includes(e.url) && token == '') {
res = false
console.log('该页面需要登陆,即将跳转到login页面');
uni.redirectTo({
url:"/uni_modules/uni-login-page/pages/index/index"
})
}
return res
}
let before_after = e => {
console.log('跳转之后');
}
let actions = ["navigateTo", "redirectTo", "reLaunch", "switchTab"]
actions.forEach(action => {
let old_action = uni[action]
uni[action] = e => {
//console.log(e);
if (before_action(e)) {
old_action(e)
before_after(e)
}
}
})
uni.reLaunch({
url: '/pages/grid/grid'
})
}
// 设备网络状态变化事件
function eventListenerNetwork () {
......@@ -100,4 +102,31 @@ function eventListenerNetwork () {
});
}
});
}
function changeAction(actions, {before_action,after_action}) {
if(typeof actions == 'string'){
actions = [actions]
}
if (!before_action) {
before_action = () => true
}
actions.forEach(action=>{
let old_action = uni[action]
uni[action] = e => {
if (before_action(e)) {
console.log(after_action);
if (after_action) {
var compose = function(f, g) {
return function(x) {
return f(x,g(x));
};
};
e.complete = compose(e.complete,after_action)
}
old_action(e)
}
}
})
}
\ No newline at end of file
......@@ -188,15 +188,24 @@
}
}
,{
"path" : "pages/test/test",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/test/test",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/common/webview/webview",
"style" :
{
"navigationBarTitleText": "",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
......
<template>
<view>
<web-view :src="url"></web-view>
</view>
</template>
<script>
export default {
onLoad({url,title}) {
console.log(url,title);
this.url = url;
if(title){
uni.setNavigationBarTitle({title});
}
},
data() {
return {
url:null
};
}
}
</script>
<style lang="scss">
</style>
......@@ -21,7 +21,7 @@
<!-- 页面分类标题 -->
<uni-section style="margin:0;" v-if="searchText" :title="listTitle" type="line"></uni-section>
<unicloud-db ref="udb" v-slot:default="{data, loading, error, options}" :options="formData"
:collection="collection" :field="field" :where="where" @load="load($event);isLoading = false;" @error="isLoading = false">
:collection="collection" :field="field" :where="where" @load="load" @error="isLoading = false">
<text v-if="error" class="list-info">{{error.message}}</text>
<!-- 基于 uni-list 的页面布局 -->
<uni-list :class="{ 'uni-list--waterfall': options.waterfall }">
......@@ -119,11 +119,13 @@
*/
refresh() {
this.tipShow = true
this.formData.status = 'more'
this.formData.status = 'more'
this.isLoading = true
this.$refs.udb.loadData({
clear: true
}, () => {
this.tipShow = false
this.tipShow = false
this.isLoading = false
uni.stopPullDownRefresh()
})
},
......@@ -133,7 +135,8 @@
loadMore() {
this.$refs.udb.loadMore()
},
load(data, ended) {
load(data, ended) {
this.isLoading = false
if (ended) {
this.formData.status = 'noMore'
}
......
<template>
<view class="about">
<view class="content">
<view class="qrcode">
<image src="https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/app_download.png" @longtap="save"></image>
<text class="tip">扫码体验uni-app</text>
</view>
<view class="desc">
<text class="code">uni-app</text>
是一个使用 <text class="code">Vue.js</text> 开发跨平台应用的前端框架。
</view>
<view class="source">
<view class="title">本示例源码获取方式:</view>
<view class="source-list">
<view class="source-cell">
<text space="nbsp">1. </text>
<text>下载 HBuilderX,新建 uni-app 项目时选择 <text class="code">Hello uni-app</text> 模板。</text>
</view>
<view class="source-cell">
<text space="nbsp">2. </text>
<u-link class="link" :href="'https://github.com/dcloudio/hello-uniapp'" :text="'https://github.com/dcloudio/hello-uniapp'"></u-link>
</view>
</view>
</view>
<!-- #ifdef APP-PLUS -->
<button type="primary" @click="share">分享</button>
<!-- #endif -->
<view class="aboutus">
<view class="logo">
<image class="logoImg" src="@/static/logo.png"></image>
<text class="tip appName">{{aboutus.appName}}</text>
<text class="tip" style="font-size:24upx;">Version {{version}}</text>
</view>
<!-- #ifdef APP-PLUS -->
<view class="version">
当前版本:{{version}}
<view class="copyright">
<text class="agreement" @click="navigateTo(aboutus.agreement.privacy,'用户服务协议')">《用户服务协议》</text>
<text class="hint"></text>
<text class="agreement" @click="navigateTo(aboutus.agreement.business,'隐私政策')">《隐私政策》</text>
<text class="hint">Copyright © {{year}}</text>
<text class="hint">{{aboutus.company}}</text>
</view>
<!-- #endif -->
</view>
</template>
<script>
import baseappConfig from '@/baseapp.config.json';
export default {
data() {
return {
providerList: [],
version: ''
}
},
onLoad() {
// #ifdef APP-PLUS
this.version = plus.runtime.version;
uni.getProvider({
service: 'share',
success: (result) => {
const data = [];
for (let i = 0; i < result.provider.length; i++) {
switch (result.provider[i]) {
case 'weixin':
data.push({
name: '分享到微信好友',
id: 'weixin'
});
data.push({
name: '分享到微信朋友圈',
id: 'weixin',
type: 'WXSenceTimeline'
});
break;
case 'qq':
data.push({
name: '分享到QQ',
id: 'qq'
});
break;
default:
break;
}
}
this.providerList = data;
},
fail: (error) => {
console.log('获取分享通道失败' + JSON.stringify(error));
}
});
this.version = plus.runtime.version
// #endif
},
methods: {
// #ifdef APP-PLUS
save() {
uni.showActionSheet({
itemList: ['保存图片到相册'],
success: () => {
plus.gallery.save('https://img.cdn.aliyun.dcloud.net.cn/guide/uniapp/app_download.png', function() {
uni.showToast({
title: '保存成功',
icon: 'none'
});
}, function() {
uni.showToast({
title: '保存失败,请重试!',
icon: 'none'
});
});
}
data() {
return {
version:"V1.0.0",
year:"2020",
aboutus:{}
};
},
created() {
this.aboutus = baseappConfig.aboutus
this.year = (new Date).getFullYear()
},
methods:{
navigateTo(url,title){
uni.navigateTo({
url: '/pages/common/webview/webview?url='+url+'&title='+title,
success: res => {},
fail: () => {},
complete: () => {}
});
},
share(e) {
if (this.providerList.length === 0) {
uni.showModal({
title: '当前环境无分享渠道!',
showCancel: false
});
return;
}
let itemList = this.providerList.map(function(value) {
return value.name;
})
uni.showActionSheet({
itemList: itemList,
success: (res) => {
let provider = this.providerList[res.tapIndex].id;
uni.share({
provider: provider,
scene: this.providerList[res.tapIndex].type && this.providerList[res.tapIndex].type === 'WXSenceTimeline' ?
'WXSenceTimeline' : "WXSceneSession",
type: (provider === "qq") ? 1 : 0,
title: '欢迎体验uni-app',
summary: 'uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架',
imageUrl: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/b09e38e0-5168-11eb-b680-7980c8a877b8.jpg',
href: "https://m3w.cn/uniapp",
success: (res) => {
console.log("success:" + JSON.stringify(res));
},
fail: (e) => {
uni.showModal({
content: e.errMsg,
showCancel: false
})
}
});
}
})
}
// #endif
}
}
</script>
<style>
page,
view {
display: flex;
}
page {
min-height: 100%;
background-color: #FFFFFF;
}
image {
width: 360rpx;
height: 360rpx;
}
.about {
flex-direction: column;
flex: 1;
}
.content {
flex: 1;
padding: 30rpx;
flex-direction: column;
justify-content: center;
}
.qrcode {
display: flex;
align-items: center;
flex-direction: column;
}
.qrcode .tip {
margin-top: 20rpx;
}
.desc {
margin-top: 30rpx;
display: block;
}
.code {
color: #e96900;
background-color: #f8f8f8;
/* #ifndef APP-NVUE */
display: inline-block;
/* #endif */
}
button {
width: 100%;
margin-top: 40rpx;
}
.version {
height: 80rpx;
line-height: 80rpx;
justify-content: center;
color: #ccc;
text-align: center;
}
.source {
margin-top: 30rpx;
flex-direction: column;
}
.source-list {
flex-direction: column;
}
.link {
color: #007AFF;
}
</style>
<style lang="scss" scoped>
.aboutus {
width: 750upx;
flex-direction: column;
}
.logo {
width: 750upx;
position: fixed;
left:0;
top:100px;
flex-direction: column;
justify-content: center;
align-items: center;
}
.logoImg{
margin-bottom: 10upx;
width:160upx;
height:160upx;
border-radius: 15px;
}
.appName{
margin-top: 20px;
margin-bottom:5px;
font-size:42rpx;
font-weight: 500;
}
.copyright {
width: 750upx;
font-size:32rpx;
flex-direction: column;
justify-content: center;
align-items: center;
bottom:20px;
left: 0;
position: fixed;
}
.agreement {
color:#2285ff;
font-size:26rpx;
}
.hint {
color:#999999;
font-size:26rpx;
}
</style>
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>隐私政策</title>
<style type="text/css">
#wrap {
padding: 10px;
white-space-collapse: discard;
}
p {
text-indent: 2em
}
.title {
text-align: center;
text-indent: 0;
}
</style>
</head>
<body>
<div id="wrap">
<p class="title">更新日期(2021-01-01)</p>
<p>
DCloud(以下简称我们)尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,我们会按照本隐私权政策的规定使用和披露您的个人信息。但我们将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,我们不会将这些信息对外披露或向第三方提供。我们会不时更新本隐私权政策。
您在同意我们服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于我们服务使用协议不可分割的一部分。
</p>
<p>
1.适用范围
</p>
<p>a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;<br>
b.在您使用我们网络服务,或访问我们平台网页时,我们自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;<br>
c.我们通过合法途径从商业伙伴处取得的用户个人数据。
</p>
<p>
您了解并同意,以下信息不适用本隐私权政策:
</p>
<p>
a.您在使用我们平台提供的搜索服务时输入的关键字信息;<br>
b.我们收集到的您在我们发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;<br>
c.违反法律规定或违反我们规则行为及我们已对您采取的措施。
</p>
<p>
2.信息使用
</p>
<p>
a.在您注册我们帐号时,您根据我们要求提供的个人注册信息;<br>
b.在您使用我们网络服务,或访问我们平台网页时,我们自动接收并记录的您的浏览器和计算机上的信息,包括但不限于您的IP地址、浏览器的类型、使用的语言、访问日期和时间、软硬件特征信息及您需求的网页记录等数据;<br>
c.我们通过合法途径从商业伙伴处取得的用户个人数据。
</p>
<p>
您了解并同意,以下信息不适用本隐私权政策:
</p>
<p>
a.您在使用我们平台提供的搜索服务时输入的关键字信息;<br>
b.我们收集到的您在我们发布的有关信息数据,包括但不限于参与活动、成交信息及评价详情;<br>
c.违反法律规定或违反我们规则行为及我们已对您采取的措施。
</p>
</p>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>服务协议</title>
<style type="text/css">
#wrap {
padding: 10px;
white-space-collapse: discard;
}
p {
text-indent: 2em
}
.title {
text-align: center;
text-indent: 0;
}
</style>
</head>
<body>
<div id="wrap">
<p class="title">更新日期(2021-01-01)</p>
<p>
尊敬的用户,欢迎阅读DCloud服务协议(以下简称“本服务协议”)。 与用户共同确认: 
</p>
<p>
1. 用户点击本服务协议正本下方的“确认”按钮并完成注册程序、获得账号和密码时,则视为用户与已达成本服务协议。本服务协议即在用户和之间产生法律效力。<br>
2. 本服务协议内容包括协议正文及所有已经发布的或将来可能发布的各类规则。用户在使用提供的各项服务的同时,承诺接受并遵守相关的各类规则。 <br>
3. 有权根据需要不时地制定、修改本服务协议正文或各类规则,如本服务协议有任何变更,将在网站上刊载公告,予以公示。经修订的协议一经在网站公布后,立即自动生效。各类规则在网站发布后立即生效,亦成为本服务协议的一部分。若用户登录或继续使用提供服务的,将表示用户接受经修订的协议。若用户不同意相关变更,必须停止使用提供的服务。 <br>
4. 及用户均已认真阅读本服务协议中的全部条款(特别是以黑体字或下划线标示出的有关及用户重大权益的条款)及发布的其他各类规则的内容,对协议正文及各类规则均以知晓、理解并接受,同意将其作为确定双方权利、义务的依据。  
</p>
<p>
条款如下:
</p>
<p>
一、定义条款 接受并同意本服务协议全部条款及发布的其他各类规则,通过网站注册成为会员,且具备完全民事行为能力或者获经法定代理人同意的限制民事行为能力的自然人、法人、个体工商户或者其他组织。
用户分为商家用户和普通用户。 1.1.1 商家用户 指通过注册成为的会员,并发布商家及其产品或者服务信息的法人、个体工商户或者其他组织,即为本服务协议文中“商家”。 1.1.2 普通用户 指享受服务的普通用户,即为本服务协议文中“用户”。 
</p>
<p>
二、用户注册  2.1 注册资格 用户保证,其具有完全民事权利能力和行为能力或虽不具有完全民事权利能力和行为能力但经其法定代理人同意享用服务。否则,其与之间的服务协议自始无效,一经发现,有权立即注销该用户,并追究其使用提供服务的一切法律责任。 2.2 注册流程 2.2.1 用户同意根据用户注册页面要求提供有效电子邮箱、联系电话等信息,设置账号及密码,用户应确保所提供全部信息的真实性、完整性和准确性。 2.2.2 用户合法、完整并有效提供注册所需信息的,有权获得账号和密码,账号和密码用于用户在进行会员登录。同时用户应当对以其账号进行的所有活动和事件负法律责任。 2.2.3 用户获得账号及密码时视为用户注册成功,用户同意接收发送的与管理、运营相关的电子邮件和/或短消息。 2.3 税费承担 用户通过购销产品或服务而发生的全部应纳税赋,均由用户自行支付。 "
</p>
</div>
</body>
</html>
......@@ -104,8 +104,6 @@
width: 150rpx;
height: 150rpx;
border-radius: 75rpx;
border-width: 1rpx;
border-color: #999999;
border: #F8F8F8 solid 1px;
}
</style>
......@@ -2,12 +2,15 @@
<view class="content">
<!-- 功能列表 -->
<uni-list class="content">
<uni-list-item v-for="(item,index) in agreeList" :key="index" :title="item.title" :to="item.to"
<uni-list-item v-for="(item,index) in agreeList" :key="index" :title="item.title"
:clickable="true" @click="itemClick(item)" :showSwitch="item.showSwitch" :switchChecked="item.isChecked"
:link="item.to"></uni-list-item>
:link="!item.showSwitch"></uni-list-item>
</uni-list>
<!-- 退出按钮 -->
<button class="bottom-back" @click="clickLogout"><text class="bottom-back-text">退出登录</text></button>
<!-- 退出按钮 -->
<button class="bottom-back" @click="clickLogout">
<text class="bottom-back-text" v-if="userInfo">退出登录</text>
<text class="bottom-back-text" v-else>登录</text>
</button>
</view>
</template>
......@@ -68,22 +71,24 @@
logout: 'user/logout'
}),
toEdit(){
uni.navigateTo({
url: '../edit/edit'
url: '/pages/ucenter/edit/edit'
});
},
changePwd(){
if(this.userInfo){
uni.navigateTo({
url:'/uni_modules/uni-login-page/pages/index/pwd-retrieve?phoneNumber='+ (this.userInfo.phone||'') +'&phoneArea=+86'
});
} else {
uni.showToast({
title: '请先登录',
icon: 'none'
});
}
uni.navigateTo({
url:'/uni_modules/uni-login-page/pages/index/pwd-retrieve?phoneNumber='+ (this.userInfo.phone||'') +'&phoneArea=+86'
});
// if(this.userInfo){
// uni.navigateTo({
// url:'/uni_modules/uni-login-page/pages/index/pwd-retrieve?phoneNumber='+ (this.userInfo.phone||'') +'&phoneArea=+86'
// });
// } else {
// uni.showToast({
// title: '请先登录',
// icon: 'none'
// });
// }
},
checkPush(){
// 手机端获取推送是否开启
......@@ -186,21 +191,26 @@
})
},
clickLogout() {
uni.showModal({
title: '提示',
content: '是否退出登录',
cancelText: '取消',
confirmText: '确定',
success: res => {
if(res.confirm){
this.logout();
uni.navigateBack();
}
},
fail: () => {},
complete: () => {}
});
if(this.userInfo){
uni.showModal({
title: '提示',
content: '是否退出登录',
cancelText: '取消',
confirmText: '确定',
success: res => {
if(res.confirm){
this.logout();
uni.navigateBack();
}
},
fail: () => {},
complete: () => {}
});
}else{
uni.navigateTo({
url: '/uni_modules/uni-login-page/pages/index/index'
});
}
},
itemClick(item) {
if (!item.to && item.event) {
......@@ -252,11 +262,12 @@
border: none;
/* #endif */
border-width: 0;
border-radius: 0;
border-radius: 0;
background-color: #007AFF;
}
.bottom-back-text {
font-size: 40rpx;
color: #DD524D;
color: #FFFFFF;
}
</style>
<template>
<view class="center">
<view class="userInfo" @click="goLogin" :hover-class="!login ? 'logo-hover' : ''">
<navigator url="/pages/ucenter/settings/settings" class="userInfo">
<image class="logo-img" :src="login ? (userInfo.avatar || avatarUrl) :avatarUrl"></image>
<view class="logo-title">
{{JSON.stringify(userInfo)}}
<text class="uer-name">{{login ? userInfo.nickname||userInfo.mobile : '您未登录'}}</text>
<view class="logo-title">
<text class="uer-name">{{login ? userInfo.username||userInfo.mobile : '未登录'}}</text>
<text class="go-login-navigat-arrow navigat-arrow" v-if="!login">&#xe65e;</text>
</view>
</view>
</navigator>
<uni-grid class="grid" :column="5" :showBorder="false" :square="true">
<uni-grid-item class="item" v-for="({text,icon},index) in gridList" @click.native="tapGrid(index)">
<uni-icons class="icon" color="#5d5e64" :type="icon" size="28"></uni-icons>
......@@ -175,9 +174,9 @@
align-items: center;
}
.logo-hover {
/* .logo-hover {
opacity: 0.8;
}
} */
.logo-img {
width: 150rpx;
......
{
"name": "uni-id",
"version": "3.0.8",
"lockfileVersion": 2,
"version": "3.0.11",
"lockfileVersion": 1,
"requires": true,
"packages": {
"": {
"version": "3.0.8",
"license": "Apache-2.0",
"dependencies": {
"uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
}
},
"../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center": {
"version": "0.0.1",
"license": "Apache-2.0"
},
"node_modules/uni-config-center": {
"resolved": "../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center",
"link": true
}
},
"dependencies": {
"uni-config-center": {
"version": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
......
......@@ -13,4 +13,4 @@
"dependencies": {
"uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
}
}
\ No newline at end of file
}
......@@ -165,6 +165,7 @@
bottom: 0;
/* #ifndef APP-NVUE */
margin: auto;
z-index:9;
/* #endif */
}
......
......@@ -107,6 +107,11 @@ exports.main = async (event, context) => {
break;
case 'login_by_weixin':
res = await uniID.loginByWeixin(params);
await uniID.updateUser({
uid: params.uid,
username:"微信用户"
});
res.userInfo.username = "微信用户"
loginLog(res)
break;
case 'login_by_univerify':
......
{
"name": "user-center",
"version": "1.0.0",
"lockfileVersion": 1
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"uni-captcha": {
"version": "file:../../../../uni-captcha/uniCloud/cloudfunctions/common/uni-captcha"
},
"uni-config-center": {
"version": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
},
"uni-id": {
"version": "file:../../../../uni-id/uniCloud/cloudfunctions/common/uni-id",
"requires": {
"uni-config-center": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
},
"dependencies": {
"uni-config-center": {
"version": "file:../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center"
}
}
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册