提交 6554650c authored 作者: yueweilu's avatar yueweilu

add

上级 86c3f94d
PODS: PODS:
- Flutter (1.0.0) - Flutter (1.0.0)
- flutter_inappwebview (0.0.1):
- Flutter
- flutter_inappwebview/Core (= 0.0.1)
- OrderedSet (~> 5.0)
- flutter_inappwebview/Core (0.0.1):
- Flutter
- OrderedSet (~> 5.0)
- flutter_tts (0.0.1): - flutter_tts (0.0.1):
- Flutter - Flutter
- OrderedSet (5.0.0)
- path_provider_foundation (0.0.1): - path_provider_foundation (0.0.1):
- Flutter - Flutter
- FlutterMacOS - FlutterMacOS
...@@ -11,13 +19,20 @@ PODS: ...@@ -11,13 +19,20 @@ PODS:
DEPENDENCIES: DEPENDENCIES:
- Flutter (from `Flutter`) - Flutter (from `Flutter`)
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
- flutter_tts (from `.symlinks/plugins/flutter_tts/ios`) - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
SPEC REPOS:
trunk:
- OrderedSet
EXTERNAL SOURCES: EXTERNAL SOURCES:
Flutter: Flutter:
:path: Flutter :path: Flutter
flutter_inappwebview:
:path: ".symlinks/plugins/flutter_inappwebview/ios"
flutter_tts: flutter_tts:
:path: ".symlinks/plugins/flutter_tts/ios" :path: ".symlinks/plugins/flutter_tts/ios"
path_provider_foundation: path_provider_foundation:
...@@ -27,7 +42,9 @@ EXTERNAL SOURCES: ...@@ -27,7 +42,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_inappwebview: 3d32228f1304635e7c028b0d4252937730bbc6cf
flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d flutter_tts: 0f492aab6accf87059b72354fcb4ba934304771d
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943 path_provider_foundation: 29f094ae23ebbca9d3d0cec13889cd9060c0e943
shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126 shared_preferences_foundation: 5b919d13b803cadd15ed2dc053125c68730e5126
......
...@@ -208,6 +208,7 @@ ...@@ -208,6 +208,7 @@
97C146EC1CF9000F007C117D /* Resources */, 97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */, 9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
1414FB73A3AFC62D10EC7D0A /* [CP] Copy Pods Resources */,
); );
buildRules = ( buildRules = (
); );
...@@ -277,6 +278,23 @@ ...@@ -277,6 +278,23 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
1414FB73A3AFC62D10EC7D0A /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
385593853978697595401F12 /* [CP] Check Pods Manifest.lock */ = { 385593853978697595401F12 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
......
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_book/routes/index.dart'; import 'package:flutter_book/routes/index.dart';
import 'package:flutter_book/store/index.dart'; import 'package:flutter_book/store/index.dart';
import 'package:flutter_book/theme.dart'; import 'package:flutter_book/theme.dart';
...@@ -13,11 +14,13 @@ import 'global.dart'; ...@@ -13,11 +14,13 @@ import 'global.dart';
void main() { void main() {
Global.init().then((_) => runApp(const MyApp())); Global.init().then((_) => runApp(const MyApp()));
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
} }
class MyApp extends StatelessWidget { class MyApp extends StatelessWidget {
const MyApp({Key? key}): super(key: key); const MyApp({Key? key}): super(key: key);
// This widget is the root of your application. // This widget is the root of your application.
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
...@@ -37,7 +40,7 @@ class MyApp extends StatelessWidget { ...@@ -37,7 +40,7 @@ class MyApp extends StatelessWidget {
title: '紫荆云书', title: '紫荆云书',
theme: AppTheme.light, theme: AppTheme.light,
darkTheme: AppTheme.dark, darkTheme: AppTheme.dark,
themeMode: AppTheme.mode, themeMode: ThemeMode.light,
routerConfig: Routes.config, routerConfig: Routes.config,
builder: CustomToast.init( builder: CustomToast.init(
context: context, context: context,
......
part of ad;
class AdController extends GetxController {
late BuildContext context;
AdController(this.context);
int _countdown = 5;
late Timer _timer;
@override
void onInit() {
super.onInit();
startTime();
}
void startTime(){
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
if (_countdown > 0) {
_countdown--;
update();
}else {
_timer.cancel();
// context.pushReplacementNamed(Routes.splash);
context.goNamed(Routes.login);
}
});
}
@override
void onClose() {
_timer.cancel();
super.onClose();
}
}
\ No newline at end of file
library ad;
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:go_router/go_router.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../routes/index.dart';
part 'view.dart';
part 'controller.dart';
\ No newline at end of file
part of ad;
class AdPage extends StatefulWidget {
const AdPage({Key? key}) : super(key: key);
@override
State<AdPage> createState() => _AdPageState();
}
class _AdPageState extends State<AdPage> {
@override
Widget build(BuildContext context) {
return GetBuilder<AdController>(
init: AdController(context),
builder:(controller) => Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
height: 200,
width: 200,
color: Colors.lime,
),
const SizedBox(height: 20),
Text(
'倒计时:${controller._countdown}',
style: const TextStyle(
fontSize: 20
),
),
],
),
),
)
);
}
}
library home; library home;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
part 'view.dart'; part 'view.dart';
part 'controller.dart'; part 'controller.dart';
\ No newline at end of file
...@@ -10,6 +10,7 @@ class HomePage extends StatefulWidget { ...@@ -10,6 +10,7 @@ class HomePage extends StatefulWidget {
class _HomePageState extends State<HomePage> { class _HomePageState extends State<HomePage> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);
return Scaffold( return Scaffold(
body: Container( body: Container(
color: Colors.cyan, color: Colors.cyan,
......
part of login;
enum LoginType{code, password}
class LoginController extends GetxController {
/// 登录方式
final loginType = LoginType.code;
/// 1、验证码登录
/// 账号
final TextEditingController codePhoneInput = TextEditingController();
/// 密码
final TextEditingController codeInput = TextEditingController();
/// 2、密码登录
/// 账号
final TextEditingController phoneInput = TextEditingController();
/// 密码
final TextEditingController passwordInput = TextEditingController();
@override
void onInit() {
/// 测试账号
if (kDebugMode) {
phoneInput.text = '18810760819';
passwordInput.text = '123456';
}
super.onInit();
}
@override
void onClose() {
phoneInput.dispose();
passwordInput.dispose();
super.onClose();
}
void submit(BuildContext context) async {
/// 验证码登录
if (loginType == LoginType.code){
}
else if (loginType == LoginType.password){
}
final result = AccountAPI.login(
phone: '',
password: 'password',
type: 'type'
);
/// 存储账号密码
StorageService.to.setString(kLocalAccount, 'phone');
StorageService.to.setString(kLocalPassword, 'password');
/// 存储用户信息
await Future.wait([
UserStore.to.setToken(''),
]);
if (!context.mounted) return;
if (context.canPop()){
context.pop();
}else {
context.goNamed(Routes.main);
}
}
}
\ No newline at end of file
library login;
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_book/apis/index.dart';
import 'package:flutter_book/store/index.dart';
import 'package:flutter_book/utils/index.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart';
import 'package:go_router/go_router.dart';
import 'package:ionicons/ionicons.dart';
import '../../routes/index.dart';
import '../../services/index.dart';
part 'view.dart';
part 'controller.dart';
\ No newline at end of file
part of login;
class LoginPage extends StatelessWidget {
const LoginPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetBuilder<LoginController>(
init: LoginController(),
builder:(controller) => GestureDetector(
onTap: () => Tools.unfocus(),
child: Scaffold(
extendBodyBehindAppBar: true,
body: SingleChildScrollView(
child: SafeArea(
minimum: const EdgeInsets.all(0),
child: codeLogin()
),
),
),
)
);
}
/// 验证码登录
Widget codeLogin(){
return Container(
margin: EdgeInsets.only(left: 10,right: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextField(
decoration: InputDecoration(
hintText: '请输入手机号',
prefixIcon: Icon(Ionicons.phone_portrait),
border: OutlineInputBorder(
borderSide: BorderSide(color: Colors.red, width: 10.w),
borderRadius: BorderRadius.all(Radius.circular(25.w)),
),
// contentPadding: EdgeInsets.symmetric(vertical: 16.0),
),
),
SizedBox(height: 30.w,),
TextField(
decoration: const InputDecoration(hintText: '获取验证码'),
),
],
),
);
}
/// 密码登录
Widget passwordLogin(){
return Container();
}
}
...@@ -6,7 +6,9 @@ import 'package:flutter_book/theme.dart'; ...@@ -6,7 +6,9 @@ import 'package:flutter_book/theme.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:ionicons/ionicons.dart'; import 'package:ionicons/ionicons.dart';
import '../record/index.dart';
import '../tts/index.dart'; import '../tts/index.dart';
import '../web/index.dart';
part 'view.dart'; part 'view.dart';
......
...@@ -39,9 +39,9 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver{ ...@@ -39,9 +39,9 @@ class _MainPageState extends State<MainPage> with WidgetsBindingObserver{
controller: controller.pageController, controller: controller.pageController,
onPageChanged: controller.onPageChanged, onPageChanged: controller.onPageChanged,
children: const [ children: const [
HomePage(), WebPage(),
TestTTSPage(), TestTTSPage(),
HomePage(), RecordPage(),
HomePage(), HomePage(),
], ],
), ),
......
part of record;
\ No newline at end of file
library record;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_book/theme.dart';
import 'package:flutter_book/utils/index.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
part 'view.dart';
part 'controller.dart';
\ No newline at end of file
part of record;
class RecordPage extends StatelessWidget {
const RecordPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Bottom Sheet Example',style: TextStyle(
color: Colors.white
),),
flexibleSpace: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [Color(0xFFEE5982),Color(0xFFAB1941)]
)
),
),
actions: [
IconButton(
color: Colors.white,
icon: const Icon(Icons.shopping_cart),
tooltip: 'Open shopping cart',
onPressed: () {
Console.log('++++++++++++++++');
},
),
],
),
body: Center(
child: ElevatedButton(
onPressed: () {
_showBottomSheet(context);
},
child: Text('Show Bottom Sheet'),
),
),
);
}
void _showBottomSheet(BuildContext context) {
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return Container(
padding: EdgeInsets.all(16.0),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Text('This is a bottom sheet'),
SizedBox(height: 16.0),
ElevatedButton(
onPressed: () {
Navigator.of(context).pop(); // 关闭底部表单
},
child: Text('Close'),
),
],
),
);
},
);
}
}
library splash_page; library splash_page;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_book/apis/index.dart';
import 'package:flutter_book/widgets/index.dart'; import 'package:flutter_book/widgets/index.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import '../../routes/index.dart'; import '../../routes/index.dart';
import '../../utils/index.dart';
part 'view.dart'; part 'view.dart';
\ No newline at end of file
...@@ -13,12 +13,13 @@ class _SplashPageState extends State<SplashPage> { ...@@ -13,12 +13,13 @@ class _SplashPageState extends State<SplashPage> {
void initState() { void initState() {
super.initState(); super.initState();
Future.wait([ Future.wait([
Future.delayed(const Duration(seconds: 1)) Future.delayed(const Duration(seconds: 2))
]).whenComplete(() async { ]).whenComplete(() async {
// final userModel = await AccountAPI.login(phone: '18337678567', password: '013790d7eb52197bead4c757ebfae7cf', type: '1'); // final userModel = await AccountAPI.login(phone: '18337678567', password: '013790d7eb52197bead4c757ebfae7cf', type: '1');
// Console.log('++++++++++++++++'); // Console.log('++++++++++++++++');
// Console.log(userModel.name); // Console.log(userModel.name);
context.goNamed(Routes.main); // context.goNamed(Routes.main);
context.pushReplacementNamed(Routes.ad);
}); });
......
...@@ -4,7 +4,6 @@ import 'package:flutter/material.dart'; ...@@ -4,7 +4,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart'; import 'package:flutter_tts/flutter_tts.dart';
import 'package:flutter_book/utils/index.dart'; import 'package:flutter_book/utils/index.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart';
part 'view.dart'; part 'view.dart';
......
library web;
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_book/utils/index.dart';
part 'view.dart';
\ No newline at end of file
part of web;
class WebPage extends StatefulWidget {
const WebPage({Key? key}) : super(key: key);
@override
State<WebPage> createState() => _WebPageState();
}
class _WebPageState extends State<WebPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: InAppWebView(
initialUrlRequest: URLRequest(
url: Uri.parse('http://192.168.11.39:5500/'),
),
// onLoadError: (InAppWebViewController controller, Uri url, int code ,String msg){
//
// },
contextMenu: ContextMenu(
menuItems: [
ContextMenuItem(title: '划线',androidId: 1,iosId: '1'),
ContextMenuItem(title: '提问',androidId: 2,iosId: '2'),
ContextMenuItem(title: '笔记',androidId: 3,iosId: '3'),
],
options: ContextMenuOptions(
hideDefaultSystemContextMenuItems: true,
),
onContextMenuActionItemClicked: (ContextMenuItem item) async {
switch (item.title){
case '划线':
Console.log('----------划线-----------');
break;
case '提问':
Console.log('----------提问-----------');
break;
case '笔记':
Console.log('----------笔记-----------');
break;
}
}
),
),
);
}
}
...@@ -2,6 +2,8 @@ library routes; ...@@ -2,6 +2,8 @@ library routes;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter_book/pages/ad/index.dart';
import 'package:flutter_book/pages/login/index.dart';
import 'package:flutter_book/pages/main/index.dart'; import 'package:flutter_book/pages/main/index.dart';
import 'package:flutter_book/pages/splash/index.dart'; import 'package:flutter_book/pages/splash/index.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
......
...@@ -6,6 +6,8 @@ abstract class Routes { ...@@ -6,6 +6,8 @@ abstract class Routes {
static const splash = 'splash'; static const splash = 'splash';
static const main = 'main'; static const main = 'main';
static const ad = 'ad';
static const login = 'login';
static final GoRouter config = GoRouter( static final GoRouter config = GoRouter(
initialLocation: '/$splash', initialLocation: '/$splash',
...@@ -28,6 +30,24 @@ abstract class Routes { ...@@ -28,6 +30,24 @@ abstract class Routes {
key: state.pageKey, key: state.pageKey,
child: const MainPage() child: const MainPage()
) )
),
GoRoute(
path: '/$ad',
name: ad,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: const AdPage()
)
),
GoRoute(
path: '/$login',
name: login,
pageBuilder: (context, state) =>CupertinoPage(
name: state.uri.toString(),
key: state.pageKey,
child: const LoginPage()
)
) )
] ]
); );
......
...@@ -36,17 +36,18 @@ abstract class AppTheme { ...@@ -36,17 +36,18 @@ abstract class AppTheme {
// 亮色主题 // 亮色主题
static SystemUiOverlayStyle get systemStyleLight => systemStyle.copyWith( static SystemUiOverlayStyle get systemStyleLight => systemStyle.copyWith(
statusBarBrightness: Brightness.light, systemNavigationBarColor: const Color(0xFF000000),
statusBarIconBrightness: Brightness.dark, systemNavigationBarIconBrightness: Brightness.light,
systemNavigationBarIconBrightness: Brightness.dark statusBarIconBrightness: Brightness.light,
statusBarBrightness: Brightness.dark,
); );
// 暗色主题 // 暗色主题
static SystemUiOverlayStyle get systemStyleDark => systemStyle.copyWith( static SystemUiOverlayStyle get systemStyleDark => systemStyle.copyWith(
statusBarBrightness: Brightness.dark, systemNavigationBarColor: const Color(0xFF000000),
statusBarIconBrightness: Brightness.light, systemNavigationBarIconBrightness: Brightness.light,
systemNavigationBarColor: const Color(0xFF0D0D0D), statusBarIconBrightness: Brightness.dark,
systemNavigationBarIconBrightness: Brightness.light statusBarBrightness: Brightness.light,
); );
/// 设置主题 /// 设置主题
...@@ -139,6 +140,7 @@ abstract class AppTheme { ...@@ -139,6 +140,7 @@ abstract class AppTheme {
), ),
), ),
appBarTheme: AppBarTheme( appBarTheme: AppBarTheme(
systemOverlayStyle: SystemUiOverlayStyle.light,
backgroundColor: scheme.background, backgroundColor: scheme.background,
scrolledUnderElevation: 0, scrolledUnderElevation: 0,
elevation: 0, elevation: 0,
......
...@@ -5,6 +5,7 @@ import 'dart:ui'; ...@@ -5,6 +5,7 @@ import 'dart:ui';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:intl/intl.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:crypto/crypto.dart'; import 'package:crypto/crypto.dart';
import 'package:convert/convert.dart'; import 'package:convert/convert.dart';
...@@ -16,3 +17,4 @@ part 'console.dart'; ...@@ -16,3 +17,4 @@ part 'console.dart';
part 'app_config.dart'; part 'app_config.dart';
part 'sign.dart'; part 'sign.dart';
part 'encrypt_util.dart'; part 'encrypt_util.dart';
part 'tools.dart';
\ No newline at end of file
part of utils;
abstract class Tools {
static void unfocus() {
WidgetsBinding.instance.focusManager.primaryFocus?.unfocus();
}
}
...@@ -126,6 +126,14 @@ packages: ...@@ -126,6 +126,14 @@ packages:
url: "https://pub.flutter-io.cn" url: "https://pub.flutter-io.cn"
source: hosted source: hosted
version: "3.0.5" version: "3.0.5"
flutter_inappwebview:
dependency: "direct main"
description:
name: flutter_inappwebview
sha256: d198297060d116b94048301ee6749cd2e7d03c1f2689783f52d210a6b7aba350
url: "https://pub.flutter-io.cn"
source: hosted
version: "5.8.0"
flutter_lints: flutter_lints:
dependency: "direct dev" dependency: "direct dev"
description: description:
...@@ -214,7 +222,7 @@ packages: ...@@ -214,7 +222,7 @@ packages:
source: hosted source: hosted
version: "4.0.2" version: "4.0.2"
intl: intl:
dependency: transitive dependency: "direct main"
description: description:
name: intl name: intl
sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6 sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
......
...@@ -50,6 +50,8 @@ dependencies: ...@@ -50,6 +50,8 @@ dependencies:
crypto: 3.0.3 crypto: 3.0.3
convert: 3.0.1 convert: 3.0.1
flutter_tts: 3.8.5 flutter_tts: 3.8.5
flutter_inappwebview: ^5.6.0
intl: 0.18.0
dev_dependencies: dev_dependencies:
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论