fix_logout
This commit is contained in:
		
							parent
							
								
									19be157411
								
							
						
					
					
						commit
						50293df5f3
					
				
							
								
								
									
										41
									
								
								=2.0
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								=2.0
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,41 @@ | ||||
| Requirement already satisfied: tensorflow in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (2.13.1) | ||||
| Requirement already satisfied: absl-py>=1.0.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (2.1.0) | ||||
| Requirement already satisfied: astunparse>=1.6.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.6.3) | ||||
| Requirement already satisfied: flatbuffers>=23.1.21 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (25.2.10) | ||||
| Requirement already satisfied: gast<=0.4.0,>=0.2.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (0.3.3) | ||||
| Requirement already satisfied: google-pasta>=0.1.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (0.2.0) | ||||
| Requirement already satisfied: grpcio<2.0,>=1.24.3 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.70.0) | ||||
| Requirement already satisfied: h5py>=2.9.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (3.11.0) | ||||
| Requirement already satisfied: keras<2.14,>=2.13.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (2.13.1) | ||||
| Requirement already satisfied: libclang>=13.0.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (18.1.1) | ||||
| Requirement already satisfied: numpy<=1.24.3,>=1.22 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.24.3) | ||||
| Requirement already satisfied: opt-einsum>=2.3.2 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (3.3.0) | ||||
| Requirement already satisfied: packaging in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (24.2) | ||||
| Requirement already satisfied: protobuf!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0dev,>=3.20.3 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (4.25.6) | ||||
| Requirement already satisfied: setuptools in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (75.1.0) | ||||
| Requirement already satisfied: six>=1.12.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.15.0) | ||||
| Requirement already satisfied: tensorboard<2.14,>=2.13 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (2.13.0) | ||||
| Requirement already satisfied: tensorflow-estimator<2.14,>=2.13.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (2.13.0) | ||||
| Requirement already satisfied: termcolor>=1.1.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.1.0) | ||||
| Requirement already satisfied: typing-extensions<4.6.0,>=3.6.6 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (3.7.4.3) | ||||
| Requirement already satisfied: wrapt>=1.11.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (1.12.1) | ||||
| Requirement already satisfied: tensorflow-io-gcs-filesystem>=0.23.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorflow) (0.34.0) | ||||
| Requirement already satisfied: wheel<1.0,>=0.23.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from astunparse>=1.6.0->tensorflow) (0.44.0) | ||||
| Requirement already satisfied: google-auth<3,>=1.6.3 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (2.38.0) | ||||
| Requirement already satisfied: google-auth-oauthlib<1.1,>=0.5 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (1.0.0) | ||||
| Requirement already satisfied: markdown>=2.6.8 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (3.7) | ||||
| Requirement already satisfied: requests<3,>=2.21.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (2.32.3) | ||||
| Requirement already satisfied: tensorboard-data-server<0.8.0,>=0.7.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (0.7.2) | ||||
| Requirement already satisfied: werkzeug>=1.0.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from tensorboard<2.14,>=2.13->tensorflow) (2.0.1) | ||||
| Requirement already satisfied: cachetools<6.0,>=2.0.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow) (5.5.2) | ||||
| Requirement already satisfied: pyasn1-modules>=0.2.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow) (0.4.1) | ||||
| Requirement already satisfied: rsa<5,>=3.1.4 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow) (4.9) | ||||
| Requirement already satisfied: requests-oauthlib>=0.7.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow) (2.0.0) | ||||
| Requirement already satisfied: importlib-metadata>=4.4 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from markdown>=2.6.8->tensorboard<2.14,>=2.13->tensorflow) (8.5.0) | ||||
| Requirement already satisfied: charset-normalizer<4,>=2 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow) (3.4.1) | ||||
| Requirement already satisfied: idna<4,>=2.5 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow) (3.10) | ||||
| Requirement already satisfied: urllib3<3,>=1.21.1 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow) (2.2.3) | ||||
| Requirement already satisfied: certifi>=2017.4.17 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from requests<3,>=2.21.0->tensorboard<2.14,>=2.13->tensorflow) (2025.1.31) | ||||
| Requirement already satisfied: zipp>=3.20 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from importlib-metadata>=4.4->markdown>=2.6.8->tensorboard<2.14,>=2.13->tensorflow) (3.20.2) | ||||
| Requirement already satisfied: pyasn1<0.7.0,>=0.4.6 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from pyasn1-modules>=0.2.1->google-auth<3,>=1.6.3->tensorboard<2.14,>=2.13->tensorflow) (0.6.1) | ||||
| Requirement already satisfied: oauthlib>=3.0.0 in /home/chenhm/anaconda3/envs/qin/lib/python3.8/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<1.1,>=0.5->tensorboard<2.14,>=2.13->tensorflow) (3.2.2) | ||||
| @ -0,0 +1,38 @@ | ||||
| # docker-compose.yml | ||||
| version: '3' | ||||
| 
 | ||||
| services: | ||||
|   web: | ||||
|     build: . | ||||
|     restart: always | ||||
|     ports: | ||||
|       - "5000:5000" | ||||
|     volumes: | ||||
|       - ./uploads:/app/uploads | ||||
|       - ./model:/app/model | ||||
|     environment: | ||||
|       - DB_HOST=27.124.22.104 | ||||
|       - DB_USER=ziyao | ||||
|       - DB_PASSWORD=ziyao123 | ||||
|       - DB_NAME=text_classification_system | ||||
|       - FLASK_APP=app.py | ||||
|       - FLASK_ENV=production | ||||
|     command: gunicorn --bind 0.0.0.0:5000 app:app --workers 4 --timeout 120 | ||||
| 
 | ||||
|   # 如果需要在本地运行MySQL,可以取消下面的注释 | ||||
|   # db: | ||||
|   #   image: mysql:8.0 | ||||
|   #   restart: always | ||||
|   #   environment: | ||||
|   #     MYSQL_ROOT_PASSWORD: root_password | ||||
|   #     MYSQL_DATABASE: text_classification_system | ||||
|   #     MYSQL_USER: ziyao | ||||
|   #     MYSQL_PASSWORD: ziyao123 | ||||
|   #   volumes: | ||||
|   #     - mysql_data:/var/lib/mysql | ||||
|   #     - ./database/schema.sql:/docker-entrypoint-initdb.d/schema.sql | ||||
|   #   ports: | ||||
|   #     - "3306:3306" | ||||
| 
 | ||||
| # volumes: | ||||
| #   mysql_data: | ||||
							
								
								
									
										209
									
								
								routes/auth.py
									
									
									
									
									
								
							
							
						
						
									
										209
									
								
								routes/auth.py
									
									
									
									
									
								
							| @ -1,13 +1,11 @@ | ||||
| from flask import Blueprint, request, jsonify, session | ||||
| from flask import Blueprint, request, jsonify, session, redirect, url_for, render_template | ||||
| import random | ||||
| import string | ||||
| import re | ||||
| from datetime import datetime, timedelta | ||||
| from utils.db import get_db_connection, close_connection | ||||
| from utils.password import hash_password | ||||
| from utils.email_sender import send_verification_email | ||||
| from utils.password import hash_password, check_password | ||||
| 
 | ||||
| from utils.password import hash_password, check_password # 移除了重复的 hash_password | ||||
| 
 | ||||
| # 创建蓝图 | ||||
| auth = Blueprint('auth', __name__) | ||||
| @ -41,48 +39,51 @@ def register(): | ||||
|         return jsonify({'success': False, 'message': '密码长度必须至少为8个字符'}), 400 | ||||
| 
 | ||||
|     # 检查邮箱是否已注册 | ||||
|     conn = get_db_connection() | ||||
|     if not conn: | ||||
|         return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
|     conn = None | ||||
|     cursor = None | ||||
|     try: | ||||
|         conn = get_db_connection() | ||||
|         if not conn: | ||||
|             return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
| 
 | ||||
|     cursor = conn.cursor(dictionary=True) | ||||
|     cursor.execute("SELECT id FROM users WHERE email = %s", (email,)) | ||||
|     existing_user = cursor.fetchone() | ||||
|         cursor = conn.cursor(dictionary=True) | ||||
|         cursor.execute("SELECT id FROM users WHERE email = %s", (email,)) | ||||
|         existing_user = cursor.fetchone() | ||||
| 
 | ||||
|     if existing_user: | ||||
|         cursor.close() | ||||
|         close_connection(conn) | ||||
|         return jsonify({'success': False, 'message': '该邮箱已被注册'}), 400 | ||||
|         if existing_user: | ||||
|             return jsonify({'success': False, 'message': '该邮箱已被注册'}), 400 | ||||
| 
 | ||||
|     # 生成验证码 | ||||
|     verification_code = ''.join(random.choices(string.digits, k=6)) | ||||
|         # 生成验证码 | ||||
|         verification_code = ''.join(random.choices(string.digits, k=6)) | ||||
| 
 | ||||
|     # 存储验证码(实际项目中应使用Redis等带过期功能的存储) | ||||
|     verification_codes[email] = { | ||||
|         'code': verification_code, | ||||
|         'expires': datetime.now() + timedelta(minutes=30), | ||||
|         'user_data': { | ||||
|             'email': email, | ||||
|             'password': password, | ||||
|             'name': name, | ||||
|             'gender': gender, | ||||
|             'birth_date': birth_date | ||||
|         # 存储验证码 | ||||
|         verification_codes[email] = { | ||||
|             'code': verification_code, | ||||
|             'expires': datetime.now() + timedelta(minutes=30), | ||||
|             'user_data': { | ||||
|                 'email': email, | ||||
|                 'password': password, | ||||
|                 'name': name, | ||||
|                 'gender': gender, | ||||
|                 'birth_date': birth_date | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     # 发送验证邮件 | ||||
|     email_sent = send_verification_email(email, verification_code) | ||||
|         # 发送验证邮件 | ||||
|         email_sent = send_verification_email(email, verification_code) | ||||
| 
 | ||||
|     cursor.close() | ||||
|     close_connection(conn) | ||||
|         if not email_sent: | ||||
|             return jsonify({'success': False, 'message': '验证邮件发送失败'}), 500 | ||||
| 
 | ||||
|     if not email_sent: | ||||
|         return jsonify({'success': False, 'message': '验证邮件发送失败'}), 500 | ||||
| 
 | ||||
|     return jsonify({ | ||||
|         'success': True, | ||||
|         'message': '验证码已发送到您的邮箱,请查收并完成注册' | ||||
|     }) | ||||
|         return jsonify({ | ||||
|             'success': True, | ||||
|             'message': '验证码已发送到您的邮箱,请查收并完成注册' | ||||
|         }) | ||||
|     finally: | ||||
|         if cursor: | ||||
|             cursor.close() | ||||
|         if conn: | ||||
|             close_connection(conn) | ||||
| 
 | ||||
| 
 | ||||
| @auth.route('/verify', methods=['POST']) | ||||
| @ -96,41 +97,32 @@ def verify(): | ||||
|     email = data['email'] | ||||
|     code = data['code'] | ||||
| 
 | ||||
|     # 检查验证码 | ||||
|     if email not in verification_codes: | ||||
|         return jsonify({'success': False, 'message': '验证码不存在或已过期'}), 400 | ||||
| 
 | ||||
|     stored_data = verification_codes[email] | ||||
| 
 | ||||
|     # 检查验证码是否过期 | ||||
|     if datetime.now() > stored_data['expires']: | ||||
|         del verification_codes[email] | ||||
|         return jsonify({'success': False, 'message': '验证码已过期'}), 400 | ||||
| 
 | ||||
|     # 检查验证码是否匹配 | ||||
|     if code != stored_data['code']: | ||||
|         return jsonify({'success': False, 'message': '验证码不正确'}), 400 | ||||
| 
 | ||||
|     # 获取用户数据 | ||||
|     user_data = stored_data['user_data'] | ||||
| 
 | ||||
|     # 处理空日期值 | ||||
|     birth_date = user_data.get('birth_date') | ||||
|     if birth_date == '' or not birth_date: | ||||
|         birth_date = None | ||||
| 
 | ||||
|     # 存储用户信息到数据库 | ||||
|     conn = get_db_connection() | ||||
|     if not conn: | ||||
|         return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
| 
 | ||||
|     cursor = conn.cursor(dictionary=True) | ||||
| 
 | ||||
|     conn = None | ||||
|     cursor = None | ||||
|     try: | ||||
|         # 哈希处理密码 | ||||
|         hashed_password = hash_password(user_data['password']) | ||||
|         conn = get_db_connection() | ||||
|         if not conn: | ||||
|             return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
| 
 | ||||
|         # 插入用户数据 | ||||
|         cursor = conn.cursor(dictionary=True) | ||||
|         hashed_password = hash_password(user_data['password']) | ||||
|         query = """ | ||||
|         INSERT INTO users (email, password, name, gender, birth_date) | ||||
|         VALUES (%s, %s, %s, %s, %s) | ||||
| @ -140,92 +132,89 @@ def verify(): | ||||
|             hashed_password, | ||||
|             user_data['name'], | ||||
|             user_data['gender'], | ||||
|             birth_date  # 使用处理过的birth_date值 | ||||
|             birth_date | ||||
|         )) | ||||
| 
 | ||||
|         conn.commit() | ||||
| 
 | ||||
|         # 清除验证码 | ||||
|         del verification_codes[email] | ||||
| 
 | ||||
|         return jsonify({ | ||||
|             'success': True, | ||||
|             'message': '注册成功,请登录系统' | ||||
|         }) | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         conn.rollback() | ||||
|         if conn: | ||||
|             conn.rollback() | ||||
|         return jsonify({'success': False, 'message': f'注册失败: {str(e)}'}), 500 | ||||
| 
 | ||||
|     finally: | ||||
|         cursor.close() | ||||
|         close_connection(conn) | ||||
|         if cursor: | ||||
|             cursor.close() | ||||
|         if conn: | ||||
|             close_connection(conn) | ||||
| 
 | ||||
| 
 | ||||
| # 在routes/auth.py现有代码的底部添加 | ||||
| 
 | ||||
| @auth.route('/login', methods=['POST']) | ||||
| @auth.route('/login', methods=['GET', 'POST']) # 支持 GET 和 POST | ||||
| def login(): | ||||
|     """用户登录接口""" | ||||
|     data = request.get_json() | ||||
|     """用户登录接口 (POST) 及登录页面 (GET)""" | ||||
|     if request.method == 'POST': | ||||
|         data = request.get_json() | ||||
| 
 | ||||
|     if not all(k in data for k in ('email', 'password')): | ||||
|         return jsonify({'success': False, 'message': '请输入邮箱和密码'}), 400 | ||||
|         if not all(k in data for k in ('email', 'password')): | ||||
|             return jsonify({'success': False, 'message': '请输入邮箱和密码'}), 400 | ||||
| 
 | ||||
|     email = data['email'] | ||||
|     password = data['password'] | ||||
|         email = data['email'] | ||||
|         password = data['password'] | ||||
| 
 | ||||
|     # 连接数据库 | ||||
|     conn = get_db_connection() | ||||
|     if not conn: | ||||
|         return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
|         conn = None | ||||
|         cursor = None | ||||
|         try: | ||||
|             conn = get_db_connection() | ||||
|             if not conn: | ||||
|                 return jsonify({'success': False, 'message': '数据库连接失败'}), 500 | ||||
| 
 | ||||
|     cursor = conn.cursor(dictionary=True) | ||||
|             cursor = conn.cursor(dictionary=True) | ||||
|             cursor.execute("SELECT id, email, password, name FROM users WHERE email = %s", (email,)) | ||||
|             user = cursor.fetchone() | ||||
| 
 | ||||
|     try: | ||||
|         # 查询用户 | ||||
|         cursor.execute("SELECT id, email, password, name FROM users WHERE email = %s", (email,)) | ||||
|         user = cursor.fetchone() | ||||
|             if not user: | ||||
|                 return jsonify({'success': False, 'message': '用户不存在'}), 404 | ||||
| 
 | ||||
|         if not user: | ||||
|             return jsonify({'success': False, 'message': '用户不存在'}), 404 | ||||
|             if not check_password(user['password'], password): | ||||
|                 return jsonify({'success': False, 'message': '密码错误'}), 401 | ||||
| 
 | ||||
|         # 验证密码 | ||||
|         if not check_password(user['password'], password): | ||||
|             return jsonify({'success': False, 'message': '密码错误'}), 401 | ||||
| 
 | ||||
|         # 创建会话 | ||||
|         session['user_id'] = user['id'] | ||||
|         session['user_info'] = { | ||||
|             'id': user['id'], | ||||
|             'email': user['email'], | ||||
|             'name': user['name'] | ||||
|         } | ||||
| 
 | ||||
|         return jsonify({ | ||||
|             'success': True, | ||||
|             'message': '登录成功', | ||||
|             'user': { | ||||
|             session['user_id'] = user['id'] | ||||
|             session['user_info'] = { | ||||
|                 'id': user['id'], | ||||
|                 'email': user['email'], | ||||
|                 'name': user['name'] | ||||
|             } | ||||
|         }) | ||||
| 
 | ||||
|     except Exception as e: | ||||
|         print(f"登录错误: {str(e)}")  # 添加错误日志 | ||||
|         return jsonify({'success': False, 'message': f'登录失败: {str(e)}'}), 500 | ||||
|             return jsonify({ | ||||
|                 'success': True, | ||||
|                 'message': '登录成功', | ||||
|                 'user': session['user_info'] # 返回用户信息给前端JS | ||||
|             }) | ||||
|         except Exception as e: | ||||
|             print(f"登录错误: {str(e)}") | ||||
|             return jsonify({'success': False, 'message': f'登录失败: {str(e)}'}), 500 | ||||
|         finally: | ||||
|             if cursor: | ||||
|                 cursor.close() | ||||
|             if conn: | ||||
|                 close_connection(conn) | ||||
| 
 | ||||
|     finally: | ||||
|         cursor.close() | ||||
|         close_connection(conn) | ||||
|     # GET 请求: 显示登录页面 | ||||
|     if 'user_id' in session: | ||||
|         # 如果用户已登录,重定向到 dashboard | ||||
|         # !!! 重要: 请确认你的 dashboard 路由 !!! | ||||
|         # 假设 dashboard 路由在 'classify' 蓝图下,且函数名为 'dashboard' | ||||
|         # 如果你的 dashboard 在主应用 app.py 中,可能是 url_for('dashboard_function_name') | ||||
|         return redirect(url_for('classify.dashboard')) # 修改这里如果你的 dashboard 路由不同 | ||||
|     return render_template('login.html') | ||||
| 
 | ||||
| 
 | ||||
| @auth.route('/logout') | ||||
| def logout(): | ||||
|     """用户登出接口""" | ||||
|     from flask import session | ||||
|     # 清除会话 | ||||
|     session.pop('user_id', None) | ||||
|     session.pop('user_info', None) | ||||
|     return jsonify({'success': True, 'message': '已成功登出'}) | ||||
|     # 重定向到登录页面 (GET /login) | ||||
|     return redirect(url_for('auth.login')) | ||||
|  | ||||
| @ -925,3 +925,72 @@ function changePageSize(e) { | ||||
|     loadDocuments(); | ||||
| } | ||||
| 
 | ||||
| // 添加示例文本功能
 | ||||
| document.querySelectorAll('.example-text').forEach(example => { | ||||
|     example.addEventListener('click', (e) => { | ||||
|         e.preventDefault(); | ||||
|         const category = example.dataset.category; | ||||
|         let exampleText = ''; | ||||
| 
 | ||||
|         // 根据类别加载不同的示例文本
 | ||||
|         switch(category) { | ||||
|             case '体育': | ||||
|                 exampleText = '北京时间9月18日,东京奥运会羽毛球男单决赛在东京体育馆举行。中国选手谌龙迎战丹麦名将安赛龙。最终安赛龙以2比0战胜谌龙,获得冠军。谌龙获得亚军,成为继林丹之后又一位在奥运会上夺得男单奖牌的中国选手。'; | ||||
|                 break; | ||||
|             case '科技': | ||||
|                 exampleText = '人工智能技术在过去十年取得了重大突破,特别是深度学习技术的应用。从语音识别到图像处理,从自动驾驶到医疗诊断,AI已经渗透到我们生活的方方面面。根据专家预测,未来五年内,AI将创造更多就业机会,而不是减少就业岗位。'; | ||||
|                 break; | ||||
|             case '财经': | ||||
|                 exampleText = '近日,中国人民银行发布2023年第三季度货币政策执行报告。报告显示,前三季度我国国内生产总值同比增长5.2%,经济运行总体回升向好。报告指出,将继续实施稳健的货币政策,保持流动性合理充裕,引导金融机构加大对实体经济的支持力度。'; | ||||
|                 break; | ||||
|             case '娱乐': | ||||
|                 exampleText = '第76届戛纳电影节昨日闭幕,华语电影《繁花》获得评审团大奖。导演王小帅在获奖感言中表示,这部电影讲述了中国改革开放以来普通人命运的变迁,希望通过电影让世界更好地了解当代中国。此前,该片已在国内收获超过10亿票房,成为年度现象级电影作品。'; | ||||
|                 break; | ||||
|             default: | ||||
|                 exampleText = '这是一段示例文本,请选择具体类别查看相关示例。'; | ||||
|         } | ||||
| 
 | ||||
|         // 填充到文本输入框
 | ||||
|         elements.textInput.value = exampleText; | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| // 为上传区域添加拖放功能
 | ||||
| const dropArea = document.getElementById('drop-area'); | ||||
| if (dropArea) { | ||||
|     ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { | ||||
|         dropArea.addEventListener(eventName, preventDefaults, false); | ||||
|     }); | ||||
| 
 | ||||
|     function preventDefaults(e) { | ||||
|         e.preventDefault(); | ||||
|         e.stopPropagation(); | ||||
|     } | ||||
| 
 | ||||
|     ['dragenter', 'dragover'].forEach(eventName => { | ||||
|         dropArea.addEventListener(eventName, highlight, false); | ||||
|     }); | ||||
| 
 | ||||
|     ['dragleave', 'drop'].forEach(eventName => { | ||||
|         dropArea.addEventListener(eventName, unhighlight, false); | ||||
|     }); | ||||
| 
 | ||||
|     function highlight() { | ||||
|         dropArea.classList.add('highlight'); | ||||
|     } | ||||
| 
 | ||||
|     function unhighlight() { | ||||
|         dropArea.classList.remove('highlight'); | ||||
|     } | ||||
| 
 | ||||
|     dropArea.addEventListener('drop', handleDrop, false); | ||||
| 
 | ||||
|     function handleDrop(e) { | ||||
|         const dt = e.dataTransfer; | ||||
|         const files = dt.files; | ||||
| 
 | ||||
|         if (files.length) { | ||||
|             elements.fileUpload.files = files; | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -18,3 +18,5 @@ document.addEventListener('DOMContentLoaded', function() { | ||||
|     const savedTheme = localStorage.getItem('theme') || 'light'; | ||||
|     document.documentElement.setAttribute('data-theme', savedTheme); | ||||
| }); | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 superlishunqin
						superlishunqin