未验证 提交 3eca0ebd 编写于 作者: O openharmony_ci 提交者: Gitee

!11407 3.2Beta3分支:sample的下线及部分修改同步

Merge pull request !11407 from 葛亚芳/OpenHarmony-3.2-Beta3
...@@ -320,8 +320,4 @@ struct Index { ...@@ -320,8 +320,4 @@ struct Index {
} }
} }
} }
``` ```
\ No newline at end of file
## 相关实例
针对Stage模型Ability开发,有以下相关示例可供参考:
- [`StageCallAbility`:StageCallAbility的创建与使用(ArkTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/ability/StageCallAbility)
...@@ -281,7 +281,3 @@ releaseCall() { ...@@ -281,7 +281,3 @@ releaseCall() {
} }
} }
``` ```
## 相关实例
针对Stage模型本地Call功能开发,有以下相关实例可供参考:
- [`StageCallAbility`:StageCallAbility的创建与使用(ArkTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/ability/StageCallAbility)
...@@ -263,5 +263,3 @@ Notification.cancel(1, "label", cancelCallback) ...@@ -263,5 +263,3 @@ Notification.cancel(1, "label", cancelCallback)
针对通知开发,有以下相关可供参考: 针对通知开发,有以下相关可供参考:
- [`Notification:`订阅、发送通知(ArkTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/Notification/Notification) - [`Notification:`订阅、发送通知(ArkTS)(API9)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/master/Notification/Notification)
- [`Notification`:通知(ArkTS)(API8)](https://gitee.com/openharmony/applications_app_samples/tree/master/common/Notification)
...@@ -91,20 +91,20 @@ ...@@ -91,20 +91,20 @@
```js ```js
// 移动子窗口位置。 // 移动子窗口位置。
windowClass.moveTo(300, 300, (err, data) => { windowClass.moveTo(300, 300, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to move the window. Cause:' + JSON.stringify(err)); console.error('Failed to move the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in moving the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in moving the window.');
}); });
// 改变子窗口大小。 // 改变子窗口大小。
windowClass.resetSize(500, 1000, (err, data) => { windowClass.resetSize(500, 1000, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in changing the window size. Data: ' + JSON.stringify(data)); console.info('Succeeded in changing the window size.');
}); });
``` ```
...@@ -114,19 +114,19 @@ ...@@ -114,19 +114,19 @@
```js ```js
// 为子窗口加载对应的目标页面。 // 为子窗口加载对应的目标页面。
windowClass.loadContent("pages/page2", (err, data) => { windowClass.loadContent("pages/page2", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause: ' + JSON.stringify(err)); console.error('Failed to load the content. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
// 显示子窗口。 // 显示子窗口。
windowClass.show((err, data) => { windowClass.show((err) => {
if (err.code) { if (err.code) {
console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); console.error('Failed to show the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in showing the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in showing the window.');
}); });
}); });
``` ```
...@@ -137,12 +137,12 @@ ...@@ -137,12 +137,12 @@
```js ```js
// 销毁子窗口。当不再需要某些子窗口时,可根据场景的具体实现逻辑,使用destroy接口销毁子窗口。 // 销毁子窗口。当不再需要某些子窗口时,可根据场景的具体实现逻辑,使用destroy接口销毁子窗口。
windowClass.destroy((err, data) => { windowClass.destroy((err) => {
if (err.code) { if (err.code) {
console.error('Failed to destroy the subwindow. Cause:' + JSON.stringify(err)); console.error('Failed to destroy the subwindow. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in destroying the subwindow. Data: ' + JSON.stringify(data)); console.info('Succeeded in destroying the subwindow.');
}); });
``` ```
...@@ -186,31 +186,31 @@ ...@@ -186,31 +186,31 @@
```js ```js
// 实现沉浸式效果。方式一:设置窗口全屏显示。 // 实现沉浸式效果。方式一:设置窗口全屏显示。
let isFullScreen = true; let isFullScreen = true;
mainWindowClass.setFullScreen(isFullScreen, (err, data) => { mainWindowClass.setFullScreen(isFullScreen, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err)); console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); console.info('Succeeded in enabling the full-screen mode.');
}); });
// 实现沉浸式效果。方式二:设置导航栏、状态栏不显示。 // 实现沉浸式效果。方式二:设置导航栏、状态栏不显示。
let names = []; let names = [];
mainWindowClass.setSystemBarEnable(names, (err, data) => { mainWindowClass.setSystemBarEnable(names, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err)); console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the system bar to be visible. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the system bar to be visible.');
}); });
// 实现沉浸式效果。 // 实现沉浸式效果。
// 方式三:设置窗口为全屏布局,配合设置状态栏、导航栏的透明度、背景/文字颜色及高亮图标等属性,与主窗口显示保持协调一致。 // 方式三:设置窗口为全屏布局,配合设置状态栏、导航栏的透明度、背景/文字颜色及高亮图标等属性,与主窗口显示保持协调一致。
let isLayoutFullScreen = true; let isLayoutFullScreen = true;
mainWindowClass.setLayoutFullScreen(isLayoutFullScreen, (err, data) => { mainWindowClass.setLayoutFullScreen(isLayoutFullScreen, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err)); console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the window layout to full-screen mode. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the window layout to full-screen mode.');
}); });
let sysBarProps = { let sysBarProps = {
statusBarColor: '#ff00ff', statusBarColor: '#ff00ff',
...@@ -219,12 +219,12 @@ ...@@ -219,12 +219,12 @@
statusBarContentColor: '#ffffff', statusBarContentColor: '#ffffff',
navigationBarContentColor: '#ffffff' navigationBarContentColor: '#ffffff'
}; };
mainWindowClass.setSystemBarProperties(sysBarProps, (err, data) => { mainWindowClass.setSystemBarProperties(sysBarProps, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err)); console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the system bar properties. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the system bar properties.');
}); });
``` ```
...@@ -234,19 +234,19 @@ ...@@ -234,19 +234,19 @@
```js ```js
// 为沉浸式窗口加载对应的目标页面。 // 为沉浸式窗口加载对应的目标页面。
mainWindowClass.loadContent("pages/page3", (err, data) => { mainWindowClass.loadContent("pages/page3", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause: ' + JSON.stringify(err)); console.error('Failed to load the content. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.' );
// 显示沉浸式窗口。 // 显示沉浸式窗口。
mainWindowClass.show((err, data) => { mainWindowClass.show((err) => {
if (err.code) { if (err.code) {
console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); console.error('Failed to show the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in showing the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in showing the window.');
}); });
}); });
``` ```
\ No newline at end of file
...@@ -82,21 +82,21 @@ class MainAbility extends Ability { ...@@ -82,21 +82,21 @@ class MainAbility extends Ability {
console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data)); console.info('Succeeded in obtaining the main window. Data: ' + JSON.stringify(data));
// 2.设置主窗口属性。以设置"是否可触"属性为例。 // 2.设置主窗口属性。以设置"是否可触"属性为例。
let isTouchable = true; let isTouchable = true;
windowClass.setTouchable(isTouchable, (err, data) => { windowClass.setTouchable(isTouchable, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the window to be touchable. Cause:' + JSON.stringify(err)); console.error('Failed to set the window to be touchable. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the window to be touchable. Data:' + JSON.stringify(data)); console.info('Succeeded in setting the window to be touchable.');
}) })
}) })
// 3.为主窗口加载对应的目标页面。 // 3.为主窗口加载对应的目标页面。
windowStage.loadContent("pages/page2", (err, data) => { windowStage.loadContent("pages/page2", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err)); console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
}); });
} }
}; };
...@@ -149,34 +149,34 @@ class MainAbility extends Ability { ...@@ -149,34 +149,34 @@ class MainAbility extends Ability {
sub_windowClass = data; sub_windowClass = data;
}); });
// 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。 // 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。
sub_windowClass.moveTo(300, 300, (err, data) => { sub_windowClass.moveTo(300, 300, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to move the window. Cause:' + JSON.stringify(err)); console.error('Failed to move the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in moving the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in moving the window.');
}); });
sub_windowClass.resetSize(500, 1000, (err, data) => { sub_windowClass.resetSize(500, 1000, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in changing the window size. Data: ' + JSON.stringify(data)); console.info('Succeeded in changing the window size.');
}); });
// 3.为子窗口加载对应的目标页面。 // 3.为子窗口加载对应的目标页面。
sub_windowClass.loadContent("pages/page3", (err, data) => { sub_windowClass.loadContent("pages/page3", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err)); console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
// 3.显示子窗口。 // 3.显示子窗口。
sub_windowClass.show((err, data) => { sub_windowClass.show((err) => {
if (err.code) { if (err.code) {
console.error('Failed to show the window. Cause:' + JSON.stringify(err)); console.error('Failed to show the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in showing the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in showing the window.');
}); });
}); });
}) })
...@@ -184,12 +184,12 @@ class MainAbility extends Ability { ...@@ -184,12 +184,12 @@ class MainAbility extends Ability {
destroySubWindow() { destroySubWindow() {
// 4.销毁子窗口。当不再需要子窗口时,可根据具体实现逻辑,使用destroy对其进行销毁。 // 4.销毁子窗口。当不再需要子窗口时,可根据具体实现逻辑,使用destroy对其进行销毁。
sub_windowClass.destroy((err, data) => { sub_windowClass.destroy((err) => {
if (err.code) { if (err.code) {
console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err)); console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in destroying the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in destroying the window.');
}); });
} }
...@@ -242,30 +242,30 @@ class MainAbility extends Ability { ...@@ -242,30 +242,30 @@ class MainAbility extends Ability {
// 2.实现沉浸式效果。方式一:设置应用主窗口为全屏显示。 // 2.实现沉浸式效果。方式一:设置应用主窗口为全屏显示。
let isFullScreen = true; let isFullScreen = true;
windowClass.setFullScreen(isFullScreen, (err, data) => { windowClass.setFullScreen(isFullScreen, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err)); console.error('Failed to enable the full-screen mode. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in enabling the full-screen mode. Data: ' + JSON.stringify(data)); console.info('Succeeded in enabling the full-screen mode.');
}); });
// 2.实现沉浸式效果。方式二:设置导航栏、状态栏不显示。 // 2.实现沉浸式效果。方式二:设置导航栏、状态栏不显示。
let names = []; let names = [];
windowClass.setSystemBarEnable(names, (err, data) => { windowClass.setSystemBarEnable(names, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err)); console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the system bar to be visible. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the system bar to be visible.');
}); });
// 2.实现沉浸式效果。方式三:设置窗口为全屏布局,配合设置导航栏、状态栏的透明度、背景/文字颜色及高亮图标等属性,与主窗口显示保持协调一致。 // 2.实现沉浸式效果。方式三:设置窗口为全屏布局,配合设置导航栏、状态栏的透明度、背景/文字颜色及高亮图标等属性,与主窗口显示保持协调一致。
let isLayoutFullScreen = true; let isLayoutFullScreen = true;
windowClass.setLayoutFullScreen(isLayoutFullScreen, (err, data) => { windowClass.setLayoutFullScreen(isLayoutFullScreen, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err)); console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the window layout to full-screen mode. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the window layout to full-screen mode.');
}); });
let sysBarProps = { let sysBarProps = {
statusBarColor: '#ff00ff', statusBarColor: '#ff00ff',
...@@ -274,21 +274,21 @@ class MainAbility extends Ability { ...@@ -274,21 +274,21 @@ class MainAbility extends Ability {
statusBarContentColor: '#ffffff', statusBarContentColor: '#ffffff',
navigationBarContentColor: '#ffffff' navigationBarContentColor: '#ffffff'
}; };
windowClass.setSystemBarProperties(sysBarProps, (err, data) => { windowClass.setSystemBarProperties(sysBarProps, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err)); console.error('Failed to set the system bar properties. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in setting the system bar properties. Data: ' + JSON.stringify(data)); console.info('Succeeded in setting the system bar properties.');
}); });
}) })
// 3.为沉浸式窗口加载对应的目标页面。 // 3.为沉浸式窗口加载对应的目标页面。
windowStage.loadContent("pages/page2", (err, data) => { windowStage.loadContent("pages/page2", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err)); console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
}); });
} }
}; };
...@@ -356,43 +356,43 @@ class MainAbility extends Ability { ...@@ -356,43 +356,43 @@ class MainAbility extends Ability {
console.info('Succeeded in creating the floatWindow. Data: ' + JSON.stringify(data)); console.info('Succeeded in creating the floatWindow. Data: ' + JSON.stringify(data));
windowClass = data; windowClass = data;
// 3.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。 // 3.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。
windowClass.moveTo(300, 300, (err, data) => { windowClass.moveTo(300, 300, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to move the window. Cause:' + JSON.stringify(err)); console.error('Failed to move the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in moving the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in moving the window.');
}); });
windowClass.resetSize(500, 1000, (err, data) => { windowClass.resetSize(500, 1000, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in changing the window size. Data: ' + JSON.stringify(data)); console.info('Succeeded in changing the window size.');
}); });
// 4.为悬浮窗加载对应的目标页面。 // 4.为悬浮窗加载对应的目标页面。
windowClass.loadContent("pages/page4", (err, data) => { windowClass.loadContent("pages/page4", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err)); console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
// 4.显示悬浮窗。 // 4.显示悬浮窗。
windowClass.show((err, data) => { windowClass.show((err) => {
if (err.code) { if (err.code) {
console.error('Failed to show the window. Cause: ' + JSON.stringify(err)); console.error('Failed to show the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in showing the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in showing the window.');
}); });
}); });
//5.销毁悬浮窗。当不再需要悬浮窗时,可根据具体实现逻辑,使用destroy对其进行销毁。 //5.销毁悬浮窗。当不再需要悬浮窗时,可根据具体实现逻辑,使用destroy对其进行销毁。
windowClass.destroy((err, data) => { windowClass.destroy((err) => {
if (err.code) { if (err.code) {
console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err)); console.error('Failed to destroy the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in destroying the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in destroying the window.');
}); });
}); });
} }
......
...@@ -65,46 +65,46 @@ export default class ServiceExtensionAbility1 extends ExtensionContext { ...@@ -65,46 +65,46 @@ export default class ServiceExtensionAbility1 extends ExtensionContext {
console.info('Succeeded in creating the volume window.') console.info('Succeeded in creating the volume window.')
windowClass = data; windowClass = data;
// 2.创建音量条窗口成功之后,可以改变其大小、位置或设置背景色、亮度等属性。 // 2.创建音量条窗口成功之后,可以改变其大小、位置或设置背景色、亮度等属性。
windowClass.moveTo(300, 300, (err, data) => { windowClass.moveTo(300, 300, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to move the window. Cause:' + JSON.stringify(err)); console.error('Failed to move the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in moving the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in moving the window.');
}); });
windowClass.resetSize(500, 1000, (err, data) => { windowClass.resetSize(500, 1000, (err) => {
if (err.code) { if (err.code) {
console.error('Failed to change the window size. Cause:' + JSON.stringify(err)); console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in changing the window size. Data: ' + JSON.stringify(data)); console.info('Succeeded in changing the window size.');
}); });
// 3.为音量条窗口加载对应的目标页面。 // 3.为音量条窗口加载对应的目标页面。
windowClass.loadContent("pages/page_volume", (err, data) => { windowClass.loadContent("pages/page_volume", (err) => {
if (err.code) { if (err.code) {
console.error('Failed to load the content. Cause:' + JSON.stringify(err)); console.error('Failed to load the content. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in loading the content. Data: ' + JSON.stringify(data)); console.info('Succeeded in loading the content.');
// 3.显示音量条窗口。 // 3.显示音量条窗口。
windowClass.show((err, data) => { windowClass.show((err) => {
if (err.code) { if (err.code) {
console.error('Failed to show the window. Cause:' + JSON.stringify(err)); console.error('Failed to show the window. Cause:' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in showing the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in showing the window.');
}); });
}); });
// 4.隐藏/销毁音量条窗口。当不再需要音量条时,可根据具体实现逻辑,对其进行隐藏或销毁。 // 4.隐藏/销毁音量条窗口。当不再需要音量条时,可根据具体实现逻辑,对其进行隐藏或销毁。
// 此处以监听音量条区域外的点击事件为例实现音量条窗口的隐藏。 // 此处以监听音量条区域外的点击事件为例实现音量条窗口的隐藏。
windowClass.on('touchOutside', () => { windowClass.on('touchOutside', () => {
console.info('touch outside'); console.info('touch outside');
windowClass.hide((err, data) => { windowClass.hide((err) => {
if (err.code) { if (err.code) {
console.error('Failed to hide the window. Cause: ' + JSON.stringify(err)); console.error('Failed to hide the window. Cause: ' + JSON.stringify(err));
return; return;
} }
console.info('Succeeded in hidinging the window. Data: ' + JSON.stringify(data)); console.info('Succeeded in hidinging the window.');
}); });
}); });
}); });
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册