提交 4b81da44 编写于 作者: study夏羽's avatar study夏羽

修复部分示例弹框不显示问题

上级 46ebd587
## 1.3.6(2022-11-18)
1. 默认开启云端一体安全网络
2. 修复部分示例弹框不显示问题
## 1.3.5(2022-10-28)
- 新增安全网络示例,[详见](https://uniapp.dcloud.net.cn/uniCloud/secure-network.html)
## 1.3.4(2022-06-29)
新增:支持 ios 安全区
## 1.3.2(2022-06-28)
......
......@@ -17,6 +17,7 @@
}
function purifyCodes(codes) {
codes = JSON.parse(JSON.stringify(codes))
const codesType = getType(codes)
switch (codesType) {
case 'object':
......@@ -54,7 +55,6 @@
e.stopPropagation()
},
closeMe(e) {
console.log('closeMe', e);
this.isShow = false
}
}
......
......@@ -47,7 +47,7 @@
});
if (!activeIndex) {
let res = await this.logout()
console.log(res.result.msg);
console.log(res);
uni.setStorageSync('role_index', activeIndex)
uni.setStorageSync('uni_id_token', false)
uni.setStorageSync('uni_id_uid', false)
......
......@@ -2,8 +2,8 @@
"name" : "hello uniCloud",
"appid" : "",
"description" : "为开发者提供的基于 serverless 模式和 js 编程的云开发平台。示例代码",
"versionName" : "1.0.0",
"versionCode" : 100,
"versionName" : "1.0.2",
"versionCode" : 102,
"transformPx" : false,
"app-plus" : {
"usingComponents" : true,
......@@ -16,7 +16,8 @@
"delay" : 0
},
"modules" : {
"VideoPlayer" : {}
"VideoPlayer" : {},
"SecureNetwork" : {}
},
"distribute" : {
"android" : {
......@@ -40,7 +41,9 @@
],
"abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ]
},
"ios" : {},
"ios" : {
"dSYMs" : false
},
"sdkConfigs" : {
"maps" : {},
"ad" : {},
......
{
"id": "uni-cloud",
"displayName": "hello uniCloud",
"version": "1.3.4",
"version": "1.3.6",
"description": "为开发者提供的基于 serverless 模式和 js 编程的云开发平台。示例代码",
"keywords": [
"uniCloud示例"
],
"repository": "https://gitee.com/dcloud/hello-uniCloud",
"repository": "https://gitcode.net/dcloud/hellounicloud",
"engines": {
"HBuilderX": "^3.3.12"
},
"dcloudext": {
"category": [
"uniCloud",
"云端一体项目模板"
],
"sale": {
"regular": {
"price": "0.00"
......@@ -31,7 +27,8 @@
"data": "无",
"permissions": "无"
},
"npmurl": ""
"npmurl": "",
"type": "unicloud-template-project"
},
"uni_modules": {
"platforms": {
......
......@@ -222,24 +222,20 @@
uni.hideLoading()
}
},
async getData(tableName) {
getData(tableName) {
console.log(tableName);
uni.showLoading({
mask: true
});
// 客户端联表查询
return await db.collection(tableName)
db.collection(tableName)
.get()
.then(res => {
this.$refs.alertCode.open(res.result)
console.log(res.result.data, "111");
return res.result.data
}).catch(err => {
console.error(err)
return err
})
.finally((e) => {
console.log(e, 9527);
uni.hideLoading()
})
},
......@@ -251,138 +247,122 @@
const res = await db.collection(orderQuery,bookQuery).field('book_id as books_info,quantity').get()
uni.hideLoading()
this.$refs.alertCode.open(res.result)
console.log(res.result.data, "111");
},
async getOrder() {
getOrder() {
//直接关联多个表为虚拟表再进行查询。仅数据表字段内容较少时使用,否者将查询超时
uni.showLoading({mask: true});
// 客户端联表查询
return await db.collection('order,book') // 注意collection方法内需要传入所有用到的表名,用逗号分隔,主表需要放在第一位
db.collection('order,book') // 注意collection方法内需要传入所有用到的表名,用逗号分隔,主表需要放在第一位
//.where('book_id.title == "三国演义"') // 查询order表内书名为“三国演义”的订单
.field('book_id{title,author} as books_info,quantity') // 这里联表查询book表返回book表内的title、book表内的author、order表内的quantity
.get()
.then(res => {
this.$refs.alertCode.open(res.result)
console.log(res.result.data, "111");
return res.result.data
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getOneBook() {
getOneBook() {
uni.showLoading({
mask: true
});
// 客户端联表查询
return await db.collection('book')
db.collection('book')
.get({
getOne: true
})
.then(res => {
this.$refs.alertCode.open(res.result)
return res.result.data
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getBookTitle() {
getBookTitle() {
uni.showLoading({
mask: true
});
// 客户端联表查询
return await db.collection('book')
db.collection('book')
.field('title')
.get()
.then(res => {
this.$refs.alertCode.open(res.result)
return res.result.data
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getBookAs() {
getBookAs() {
uni.showLoading({
mask: true
});
// 客户端联表查询
return await db.collection('book')
db.collection('book')
.field('title,author as book_author')
.get()
.then(res => {
this.$refs.alertCode.open(res.result)
return res.result.data
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getOrderOrderBy(str) {
getOrderOrderBy(str) {
uni.showLoading({
mask: true
});
return await db.collection('order')
db.collection('order')
.orderBy(str)
.get()
.then(res => {
this.$refs.alertCode.open(res.result)
return res.result.data
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getBookHasCount() {
getBookHasCount() {
uni.showLoading({
mask: true
});
return await db.collection('book')
db.collection('book')
.get({
"getCount": true
})
.then(res => {
this.$refs.alertCode.open(res.result)
return res.result
}).catch(err => {
console.error(err)
return err
}).finally(() => {
uni.hideLoading()
})
},
async getTreeFn() {
getTreeFn() {
uni.showLoading({
mask: true
});
return await db.collection("department").get({
db.collection("department").get({
getTree: {
limitLevel: 10, // 最大查询层级(不包含当前层级),可以省略默认10级,最大15,最小1
// startWith: "parent_code==''" // 第一层级条件,此初始条件可以省略,不传startWith时默认从最顶级开始查询
}
})
.then((res) => {
console.log("res: ",res);
const resdata = res.result.data
console.log("resdata", );
this.$refs.alertCode.open(resdata)
return resdata
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
return err
}).finally(() => {
uni.hideLoading()
})
......@@ -398,7 +378,6 @@
console.log(res);
this.$refs.alertCode.open(res.result.data)
uni.hideLoading()
return res.result.data
}
}
}
......
......@@ -128,53 +128,45 @@
console.log("this.currentRole: ", this.currentRole);
},
async getNoticeData() {
console.log('111111111111');
let res = await db.action('add_view_count')
.collection('notice')
.field('data,_id,update_time,view_count')
.get();
console.log("res: ",res);
this.noticeData = res.result.data[0]
},
async clickIcon(e, item) {
if (e) {
let res = await this.$refs.udb.remove(item._id);
return res
await this.$refs.udb.remove(item._id);
} else {
this.defaultText = item.text
this.activeNoticeId = item._id
this.$refs.upDataDialog.open()
}
},
async updateState(e, _id) {
updateState(e, _id) {
console.log(e.detail.value, _id);
uni.showLoading({
mask: true
});
return await db.collection('comment')
db.collection('comment')
.doc(_id)
.update({
"state": e.detail.value / 1
})
.then(({
code,
message
}) => {
.then(({code,message}) => {
uni.showToast({
title: '已切换为:' + (e.detail.value ? '审核通过' : '审核中'),
icon: 'none',
duration: 3000
});
console.log(code, message);
return message
}).catch(({
code,
message
}) => {
}).catch(({code,message}) => {
console.log(code, message);
return message
}).finally(e => {
uni.hideLoading()
this.$refs.upDataDialog.close()
return e
})
},
async updateComment(text) {
......@@ -192,9 +184,7 @@
uni.showLoading({
mask: true
});
return await this.$refs.udb.update(this.activeNoticeId, {
text
}, {
await this.$refs.udb.update(this.activeNoticeId, {text}, {
action: "up_comment",
toastTitle: '修改成功', // toast提示语
success: (res) => { // 更新成功后的回调
......@@ -212,14 +202,10 @@
}
}
})
return message
},
fail: (err) => { // 更新失败后的回调
const {
message
} = err
return message
console.log("err: ",err);
const {message} = err
},
complete: () => { // 完成后的回调
uni.hideLoading()
......@@ -237,13 +223,11 @@
return false
}
this.$refs.dialog.close()
return await db.collection('comment').add({
await db.collection('comment').add({
text
}).then(res => {
console.log(res);
this.getNewData()
return res.result
}).catch(({
code,
message
......@@ -261,11 +245,9 @@
});
}
console.log(code, message);
return message
})
},
getNewData() {
//console.log(this.$refs.udb);
this.$refs.udb.refresh() //{clear:true}
},
getUserImg(e) {
......
......@@ -84,7 +84,8 @@
value: -1
}
],
rulo_index: 0
rulo_index: 0,
role:''
}
},
mounted() {
......@@ -118,17 +119,17 @@
},
methods: {
setState(e){
console.log(e.detail.value);
console.log(e.detail.value,dbCollectionName);
db.collection(dbCollectionName).update({
state:e.detail.value
}).then((res) => {
console.log("res: ",res);
this.formData.state = e.detail.value
uni.showToast({
icon: 'none',
title: '更新成功'
})
}).catch((err) => {
console.log(err);
console.log(JSON.stringify(err));
uni.showModal({
content: err.message || '请求服务失败',
......@@ -147,6 +148,7 @@
changePermission({role,index}){
console.log('index', index);
console.log('role', role);
this.role = role
this.rulo_index = index
let field = "_id,username,nickname,state";
let where = {}
......@@ -159,7 +161,7 @@
db.collection('permission-test')
.where(where)
.field(field).get().then(e => {
console.log(e.result.data);
console.log(e);
if (e.result.data[0]){
this.formData = e.result.data[0]
}else{
......@@ -183,18 +185,18 @@
})
this.$refs.form.submit().then((res) => {
this.submitForm(res)
}).catch((errors) => {
}).catch((e) => {
uni.hideLoading()
})
},
addDefaultData() {
console.log('addDefaultData');
console.log("dbCollectionName: ",dbCollectionName);
db.collection(dbCollectionName).add({
"nickname":"默认昵称",
"username":"默认姓名",
"phone":"1888888888"
}).then((res) => {
console.log(res.result.id);
console.log(res);
this.formData._id = res.result.id
uni.showToast({
icon: 'none',
......@@ -213,7 +215,6 @@
},
submitForm(value) {
// 使用 uni-clientDB 提交数据
console.log('value._id------------------------------------------------------', this.formData._id);
if (this.formData._id) {
console.log(this.formData.state);
if(this.formData.state===0){
......@@ -236,22 +237,17 @@
icon: 'none',
title: '更新成功'
})
console.log("33333333333: ",33333333333);
}).catch((err) => {
console.log(err.message);
console.log(JSON.stringify(err));
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
console.log("44444444: ",33333333333);
}).finally(() => {
uni.hideLoading()
console.log("5555555555: ",33333333333);
})
} else {
console.log('err 9527');
console.log("6666666666: ",33333333333);
}
}
......
......@@ -220,9 +220,9 @@
urls:[url]
})
},
async addFn(){
addFn(){
uni.showLoading({mask:true})
return await ptDb.add({
ptDb.add({
nickname:"默认昵称",
username:"默认姓名",
phone:"18888888888"
......@@ -233,7 +233,6 @@
showCancel: false,
confirmText:"知道了"
});
return e
}).catch(err=>{
console.log(err);
uni.showModal({
......@@ -242,21 +241,19 @@
showCancel: false,
confirmText:"知道了"
});
return err
}).finally(() => {
uni.hideLoading()
})
},
async removeFn(){
removeFn(){
uni.showLoading({mask:true})
return await ptDb.remove().then(e=>{
ptDb.remove().then(e=>{
console.log(e,"123");
uni.showModal({
content: JSON.stringify(e.result),
showCancel: false,
confirmText:"知道了"
});
return e
}).catch(err=>{
console.log(JSON.stringify(err));
uni.showModal({
......@@ -265,7 +262,6 @@
showCancel: false,
confirmText:"知道了"
});
return err
}).finally(() => {
uni.hideLoading()
})
......@@ -273,13 +269,10 @@
updateNickname(self){
},
async updateFn(data,where={}){
console.log("data");
updateFn(data,where={}){
console.log(data);
uni.showLoading({mask:true})
return await ptDb
.where(where)
.update(data)
ptDb.where(where).update(data)
.then(e=>{
console.log(e);
uni.showModal({
......@@ -287,9 +280,7 @@
showCancel: false,
confirmText:"知道了"
});
return e
}).catch(err=>{
if('nickname' in data){
uni.showModal({
title:"被拒绝,普通用户角色,只能更新自己创建的数据。",
......@@ -328,11 +319,6 @@
});
}
console.log("错误------",err);
console.log("错误------",err.message);
return err
//console.log(err);
/*
*/
/* uni.showModal({
title:"执行更新操作失败!",
content: "schema配置了,更新该字段限:\n 1、数据创建者,2、审核员,3、当然还有无任何权限限制的管理员",
......@@ -343,16 +329,14 @@
uni.hideLoading()
})
},
async getFn(field='uid,username,nickname,state'){
getFn(field='uid,username,nickname,state'){
// console.time('getFn');
uni.showLoading({mask:true})
return await ptDb.field(field).get()
ptDb.field(field).get()
.then(e=>{
// console.timeEnd('getFn');
console.log(e,"1111");
console.log(e);
if(e.result.data.length){
console.log(e.result.data.length);
//console.log(this.$refs.alertCode);
this.$refs.alertCode.open(e.result.data)
}else{
uni.showModal({
......@@ -362,7 +346,6 @@
confirmText:"知道了"
});
}
return e.result
}).catch(err=>{
// console.timeEnd('getFn');
console.log(err,"err---");
......@@ -372,7 +355,6 @@
showCancel: false,
confirmText:"知道了"
});
return err
}).finally(() => {
uni.hideLoading()
})
......@@ -380,7 +362,6 @@
changePermission(e){
console.log(e, '切换完成');
this.currentRole = e.role
console.log("this.currentRole",this.currentRole);
}
}
}
......
......@@ -144,15 +144,13 @@
"text": "数据" + Date.now(),
...hasIp
}),
);
let res;
try {
switch (e.type) {
case 'read':
res = await db.action(e.action).collection(tableName).field(e.field).where(e.where).get()
return res
res = await db.action(e.action).collection(tableName).where(e.where).field(e.field).get()
break;
case 'create':
res = await db.action(e.action).collection(tableName)
......@@ -160,7 +158,6 @@
"text": "默认写入的数据" + Date.now(),
...hasIp
})
return res
break;
case 'update':
res = await db.action(e.action).collection(tableName).where(e.where)
......@@ -168,16 +165,16 @@
"text": "更新后的数据" + Date.now(),
...hasIp
})
return res
break;
case 'delete':
res = await db.action(e.action).collection(tableName).where(e.where).remove()
return res
break;
default:
console.log('err 未定义事件类型');
break;
}
console.log("res: ",res);
this.$refs.alertCode.open(res.result)
} catch (err) {
console.log('TODO handle the exception', err);
uni.showModal({
......@@ -185,18 +182,14 @@
content: item.explain +''+ this.typeText+'字段'+item.field+'' + (item.explain_end?item.explain_end:''),
showCancel: false
});
//return false
return err.message
} finally{
uni.hideLoading()
}
this.$refs.alertCode.open(res.result)
},
changePermission(e) {
console.log(e, '切换完成');
console.log("this.typeIndex: ",this.typeIndex);
this.currentRole = e.role
console.log("this.currentRole",this.currentRole);
}
}
}
......
......@@ -137,7 +137,6 @@
});
return false
}
return res
break;
case 'create':
res = await db.action(e.action).collection(tableName).add({
......@@ -156,6 +155,8 @@
console.log('err 未定义事件类型');
break;
}
console.log("res: ",res);
this.$refs.alertCode.open(res.result)
} catch (err) {
console.log('TODO handle the exception', err);
uni.showModal({
......@@ -163,19 +164,14 @@
content: item.explain +''+ this.typeText+'数据】' + (item.explain_end?item.explain_end:''),
showCancel: false
});
//return false
return err.message
} finally{
uni.hideLoading()
}
this.$refs.alertCode.open(res.result)
},
changePermission(e) {
console.log(e, '切换完成');
console.log("this.typeIndex: ",this.typeIndex);
this.currentRole = e.role
console.log("this.currentRole",this.currentRole);
}
}
}
......
......@@ -139,7 +139,6 @@
created() {
for (var j = 0; j < this.types.length; j++) {
let type = this.types[j].value
console.log(type);
for (let i = 0; i < this.permissionList.length; i++) {
let jsonString = `{
"permission":{
......@@ -179,28 +178,26 @@
});
return false
}
return res
break;
case 'create':
res = await db.action(e.action).collection(tableName).add({
"text": "默认写入的数据" + Date.now()
})
return res
break;
case 'update':
res = await db.action(e.action).collection(tableName).where(e.where).update({
"text": "更新后的数据" + Date.now()
})
return res
break;
case 'delete':
res = await db.action(e.action).collection(tableName).where(e.where).remove()
return res
break;
default:
console.log('err 未定义事件类型');
break;
}
console.log("res: ",res);
this.$refs.alertCode.open(res.result)
} catch (err) {
console.log('TODO handle the exception', err);
uni.showModal({
......@@ -208,20 +205,15 @@
content: item.explain + '' + this.typeText + '数据】' + (item.explain_end ? item.explain_end : ''),
showCancel: false
});
//return false
return err.message
} finally {
uni.hideLoading()
}
this.$refs.alertCode.open(res.result)
},
changePermission(e) {
console.log(e, '切换完成');
console.log("role: ",e.role);
console.log("typeIndex: ",this.typeIndex);
this.currentRole = e.role
console.log(this.currentRole);
}
}
}
......
......@@ -117,7 +117,6 @@
},
onLoad() {
setTimeout(()=>{
console.log(this.$refs.udb,12121111);
this.dataList = this.$refs.udb.dataList
}, 2000);
},
......@@ -155,7 +154,6 @@
}
},
async setOrderby({detail:{value}}) {
console.log("value: ",value);
let arr = Object.keys(this.orderbyObj)
if(arr.length>value.length){
for (let key in this.orderbyObj) {
......@@ -171,10 +169,10 @@
uni.showActionSheet({
itemList,
success: ({tapIndex}) => {
console.log(tapIndex);
this.orderbyObj[key] = itemList[tapIndex];
},
fail: (err) => {
console.log(err);
this.orderbyArr = arr
},
complete() {
......@@ -201,7 +199,7 @@
return arrJson
},
async add(){
return await udb.add({
await udb.add({
book_id:"add-test",
quantity:Date.now()
},{
......@@ -212,13 +210,13 @@
}
})
},
async remove(){
remove(){
const _id = udb.dataList[0]._id
return await udb.remove(_id)
udb.remove(_id)
},
async update(){
update(){
const _id = udb.dataList[0]._id
return await udb.update(_id,{book_id:"这条数据被改"},
udb.update(_id,{book_id:"这条数据被改"},
{
success: (res) => { // 新增成功后的回调
this.getFn()
......
describe('pages/clientDB/validate/validate.vue', () => {
let page
beforeAll(async () => {
// 重新reLaunch至首页,并获取首页page对象(其中 program 是uni-automator自动注入的全局对象)
page = await program.reLaunch('/pages/clientDB/validate/validate')
if (process.env.UNI_PLATFORM === "h5"|| process.env.UNI_PLATFORM === "app-plus") {
await page.waitFor(1000)
}
if (process.env.UNI_PLATFORM === "mp-weixin") {
await page.waitFor(1000);//微信等待
}
page = await program.currentPage()
})
beforeEach(async()=>{
jest.setTimeout(5000)
return false
})
it('点击切换navBar', async () => {
//expect.assertions(1);
const segmentedControl = await page.$('.segmented-control')
const seControl = await segmentedControl.$$('.segmented-control__item')
// console.log(await seControl[0].text());
expect(await seControl[0].text()).toBe('实例demo')
await seControl[1].tap()
await page.waitFor(300)
await seControl[2].tap()
await page.waitFor(300)
})
})
......@@ -30,11 +30,11 @@
return {}
},
methods: {
async add() {
add() {
uni.showLoading({
title: '处理中...'
})
return await uniCloud.callFunction({
uniCloud.callFunction({
name: 'add',
data: {
name: 'DCloud',
......@@ -48,7 +48,6 @@
showCancel: false
})
console.log(res)
return res.result.id
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......@@ -58,11 +57,11 @@
console.error(err)
})
},
async remove() {
remove() {
uni.showLoading({
title: '处理中...'
})
return await uniCloud.callFunction({
uniCloud.callFunction({
name: 'remove'
}).then((res) => {
uni.hideLoading()
......@@ -71,7 +70,6 @@
showCancel: false
})
console.log(res)
return res.result.msg
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......@@ -81,11 +79,11 @@
console.error(err)
})
},
async update() {
update() {
uni.showLoading({
title: '处理中...'
})
return await uniCloud.callFunction({
uniCloud.callFunction({
name: 'update',
data: {
name: 'DCloud',
......@@ -99,7 +97,6 @@
showCancel: false
})
console.log(res)
return res.result.msg
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......@@ -109,11 +106,11 @@
console.error(err)
})
},
async get() {
get() {
uni.showLoading({
title: '处理中...'
})
return await uniCloud.callFunction({
uniCloud.callFunction({
name: 'get'
}).then((res) => {
uni.hideLoading()
......@@ -122,7 +119,6 @@
showCancel: false
})
console.log(res)
return res.result.data
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......@@ -132,9 +128,9 @@
console.error(err)
})
},
async useCommon() {
useCommon() {
console.log('请确保自己已经阅读并按照公用模块文档操作 https://uniapp.dcloud.io/uniCloud/cf-common')
return await uniCloud.callFunction({
uniCloud.callFunction({
name: 'use-common'
}).then((res) => {
uni.hideLoading()
......@@ -143,7 +139,6 @@
showCancel: false
})
console.log(res)
return res.result
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......
......@@ -104,7 +104,6 @@
showCancel: false
})
console.log(res)
return res.msg
}).catch((err) => {
uni.hideLoading()
uni.showModal({
......
......@@ -119,37 +119,33 @@
/**
* 触发表单提交
*/
async submit() {
submit() {
uni.showLoading({
mask: true
})
return this.$refs.form.submit().then(async(res) => {
this.$refs.form.submit().then((res) => {
console.log(res,"000");
let msg = await this.submitForm(res)
console.log(msg,121399999);
return res
this.submitForm(res)
}).catch((errors) => {
uni.hideLoading()
})
},
async submitForm(value) {
submitForm(value) {
// 使用 clientDB 提交数据
return await db.collection(dbCollectionName).add(value).then((res) => {
db.collection(dbCollectionName).add(value).then((res) => {
console.log("res:---- ",res);
uni.showToast({
icon: 'none',
title: '新增成功'
})
//this.getOpenerEventChannel().emit('refreshData')
//setTimeout(() => uni.navigateBack(), 500)
return res
// this.getOpenerEventChannel().emit('refreshData')
// setTimeout(() => uni.navigateBack(), 500)
}).catch((err) => {
uni.showModal({
content: err.message || '请求服务失败',
showCancel: false
})
return err
}).finally(() => {
uni.hideLoading()
})
......
......@@ -18,7 +18,7 @@
"username":{
"bsonType":"string",
"permission":{
"write":"doc.state != 0 || auth.uid != doc.uid"
"update":"doc.state != 0 || auth.uid != doc.uid"
}
},
"state":{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册