样式:调整好

This commit is contained in:
xiao12feng8 2026-02-05 09:35:22 +08:00
parent 155c9f824c
commit 9190872fcb
9 changed files with 83 additions and 925 deletions

View File

@ -1,199 +0,0 @@
# PHP 服务连接问题解决方案
## 问题描述
Python 后端无法连接到 PHP 服务,报错:
```
HTTPConnectionPool(host='192.168.1.164', port=30100): Read timed out
```
## 已完成的修复
### 1. 配置修正
- ✅ 修改 `lover/deps.py`:移除硬编码 IP从配置读取
- ✅ 修改 `lover/config.py`:默认地址改为 `127.0.0.1:30100`
- ✅ 修改 `.env`:端口从 `8080` 改为 `30100`
- ✅ 减少超时时间:从 5 秒改为 3 秒
- ✅ 改进错误处理:区分超时和连接错误
### 2. 启动脚本优化
- ✅ 使用 `router.php` 而不是 `-t .`
- ✅ 添加端口清理逻辑,自动终止占用端口的旧进程
- ✅ 添加等待时间,确保服务完全启动
### 3. 测试工具
创建了 `xunifriend_RaeeC/public/test_api.php` 用于测试:
- `/test_api.php` - 测试 PHP 服务器基本响应
- `/test_db` - 测试数据库连接
## 当前问题分析
### PHP 服务器状态
```
端口 30100 已被监听(进程 31592, 16636
但是请求超时,无法获得响应
```
### 可能的原因
1. **数据库连接问题**
- PHP 应用可能在启动时尝试连接数据库
- 如果数据库连接失败或慢,会导致请求超时
- 检查 `xunifriend_RaeeC/application/database.php` 配置
2. **PHP 内置服务器限制**
- PHP 内置服务器是单线程的
- 如果有请求阻塞,后续请求会超时
- 建议使用 Apache 或 Nginx + PHP-FPM
3. **应用初始化问题**
- ThinkPHP 框架初始化可能有问题
- 检查 `xunifriend_RaeeC/application/admin/command/Install/install.lock` 是否存在
4. **路由配置问题**
- API 路由可能未正确配置
- 检查 `xunifriend_RaeeC/application/route.php`
## 解决步骤
### 步骤 1: 测试 PHP 服务器基本功能
```cmd
# 在浏览器或命令行测试
curl http://127.0.0.1:30100/test_api.php
```
预期响应:
```json
{
"code": 1,
"msg": "PHP 服务器运行正常",
"time": 1738665600,
"data": {
"php_version": "8.0.0",
"server_time": "2026-02-04 19:00:00"
}
}
```
### 步骤 2: 测试数据库连接
```cmd
curl http://127.0.0.1:30100/test_db
```
如果数据库连接失败,检查:
- MySQL 是否运行
- `xunifriend_RaeeC/application/database.php` 配置是否正确
- 数据库用户名密码是否正确
### 步骤 3: 测试实际 API
```cmd
# 使用有效的 token 测试
curl -H "token: YOUR_TOKEN_HERE" http://127.0.0.1:30100/api/user_basic/get_user_basic
```
### 步骤 4: 检查 PHP 错误日志
PHP 内置服务器的错误会显示在启动窗口中,查看是否有:
- 数据库连接错误
- 文件权限错误
- PHP 语法错误
- 缺少扩展
## 临时解决方案
### 方案 1: 使用开发环境兜底(已实现)
Python 后端在开发环境下,如果 PHP 连接失败,会自动使用测试用户:
```python
# 在 lover/deps.py 中
if settings.APP_ENV == "development" and settings.DEBUG:
logger.warning(f"开发环境token 验证失败({e.detail}),使用测试用户")
return AuthedUser(id=70, reg_step=2, gender=0, nickname="test-user", token="")
```
### 方案 2: 直接使用数据库认证
修改 Python 后端,不依赖 PHP API直接查询数据库
```python
# 在 lover/deps.py 中添加
def _fetch_user_from_db(token: str) -> Optional[dict]:
"""直接从数据库获取用户信息"""
from lover.db import get_db
db = next(get_db())
user = db.execute(
"SELECT * FROM fa_user WHERE token = :token",
{"token": token}
).fetchone()
return dict(user) if user else None
```
### 方案 3: 重启 PHP 服务
```cmd
# 使用更新后的启动脚本,会自动清理旧进程
启动项目.bat
```
## 长期解决方案
### 推荐:使用 Nginx + PHP-FPM
PHP 内置服务器不适合生产环境,建议:
1. 安装 Nginx
2. 配置 PHP-FPM
3. 配置 Nginx 反向代理
配置示例:
```nginx
server {
listen 30100;
server_name localhost;
root C:/Users/Administrator/Desktop/Project/AI_GirlFriend/xunifriend_RaeeC/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
## 调试命令
### 查看端口占用
```cmd
netstat -ano | findstr :30100
```
### 终止进程
```cmd
taskkill /F /PID <进程ID>
```
### 测试 PHP 配置
```cmd
D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe -v
D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe -m # 查看已安装的扩展
```
### 手动启动 PHP 服务器(用于调试)
```cmd
cd xunifriend_RaeeC\public
D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe -S 0.0.0.0:30100 router.php
```
## 下一步行动
1. **立即测试**:运行 `curl http://127.0.0.1:30100/test_api.php`
2. **检查数据库**:确认 MySQL 正在运行
3. **查看日志**:检查 PHP 启动窗口的错误信息
4. **重启服务**:使用更新后的 `启动项目.bat`
## 文件修改记录
- `lover/deps.py` - 改进错误处理和超时设置
- `lover/config.py` - 修正默认地址
- `.env` - 修正端口配置
- `启动项目.bat` - 添加端口清理和 router.php
- `xunifriend_RaeeC/public/test_api.php` - 新增测试脚本

View File

@ -1,161 +0,0 @@
@echo off
chcp 65001 >nul
title PHP 开发服务器
:MENU
cls
echo ========================================
echo PHP 开发服务器启动脚本 (高级版)
echo ========================================
echo.
echo 请选择启动模式:
echo.
echo [1] 快速启动 (端口 8080)
echo [2] 自定义端口
echo [3] 查看 PHP 信息
echo [4] 退出
echo.
echo ========================================
set /p choice=请输入选项 (1-4):
if "%choice%"=="1" goto QUICK_START
if "%choice%"=="2" goto CUSTOM_PORT
if "%choice%"=="3" goto PHP_INFO
if "%choice%"=="4" goto END
echo [错误] 无效选项,请重新选择
timeout /t 2 >nul
goto MENU
:QUICK_START
set PORT=8080
goto START_SERVER
:CUSTOM_PORT
echo.
set /p PORT=请输入端口号 (例如: 8080):
if "%PORT%"=="" (
echo [错误] 端口号不能为空
timeout /t 2 >nul
goto MENU
)
goto START_SERVER
:START_SERVER
cls
echo ========================================
echo 正在启动 PHP 开发服务器...
echo ========================================
echo.
REM 设置 PHP 路径
set PHP_PATH=D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe
REM 检查 PHP 是否存在
if not exist "%PHP_PATH%" (
echo [错误] PHP 未找到: %PHP_PATH%
echo.
echo 请修改脚本中的 PHP_PATH 变量
pause
goto MENU
)
REM 显示 PHP 版本
echo [信息] PHP 版本:
"%PHP_PATH%" -v | findstr /C:"PHP"
echo.
REM 设置项目根目录
set PROJECT_ROOT=%~dp0xunifriend_RaeeC\public
REM 检查项目目录是否存在
if not exist "%PROJECT_ROOT%" (
echo [错误] 项目目录未找到: %PROJECT_ROOT%
pause
goto MENU
)
REM 获取本机 IP 地址
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /C:"IPv4"') do (
set LOCAL_IP=%%a
goto :IP_FOUND
)
:IP_FOUND
set LOCAL_IP=%LOCAL_IP: =%
REM 设置服务器参数
set HOST=0.0.0.0
echo [信息] 项目目录: %PROJECT_ROOT%
echo [信息] 服务器端口: %PORT%
echo.
echo ========================================
echo 访问地址:
echo ========================================
echo.
echo [本地访问]
echo http://127.0.0.1:%PORT%
echo http://localhost:%PORT%
echo.
echo [局域网访问]
echo http://%LOCAL_IP%:%PORT%
echo.
echo [管理后台]
echo http://127.0.0.1:%PORT%/admin
echo.
echo ========================================
echo.
echo [提示] 按 Ctrl+C 停止服务器
echo.
REM 询问是否打开浏览器
set /p OPEN_BROWSER=是否自动打开浏览器? (Y/N):
if /i "%OPEN_BROWSER%"=="Y" (
echo [信息] 正在打开浏览器...
start http://127.0.0.1:%PORT%
)
echo.
echo [信息] 服务器启动中...
echo ========================================
echo.
REM 启动 PHP 内置服务器
cd /d "%PROJECT_ROOT%"
"%PHP_PATH%" -S %HOST%:%PORT% -t .
pause
goto MENU
:PHP_INFO
cls
echo ========================================
echo PHP 信息
echo ========================================
echo.
set PHP_PATH=D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe
if not exist "%PHP_PATH%" (
echo [错误] PHP 未找到: %PHP_PATH%
pause
goto MENU
)
echo [PHP 版本]
"%PHP_PATH%" -v
echo.
echo [PHP 配置文件]
"%PHP_PATH%" --ini
echo.
echo [已加载的扩展]
"%PHP_PATH%" -m
echo.
pause
goto MENU
:END
echo.
echo 感谢使用!
timeout /t 1 >nul
exit

View File

@ -209,8 +209,12 @@
})
},
connectWebSocket() {
// baseURLPy WebSocket URL
let wsUrl = baseURLPy.replace('http://', 'ws://').replace('https://', 'wss://') + '/voice/call'
console.log('WebSocket URL:', wsUrl)
this.socketTask = uni.connectSocket({
url: 'wss://lovers.shandonghuixing.com/voice/call',
url: wsUrl,
header: {
"content-type": "application/json",
'Authorization': 'Bearer ' + uni.getStorageSync("token") || ""

View File

@ -143,25 +143,28 @@
<image class="home-header-icon" src="/static/images/replacement_switch.png" mode="aspectFit"></image>
<text class="home-header-text">装扮设置</text>
</view>
<view class="home-header-spacer"></view>
<view class="home-header-btn" @click="todynamics">
<image class="home-header-icon" src="/static/images/dynamics_logo.png" mode="aspectFit"></image>
<text class="home-header-text">朋友圈</text>
</view>
<view class="home-header-btn" @click="todiary">
<image class="home-header-icon" src="/static/images/diary_a1.png" mode="aspectFit"></image>
<text class="home-header-text">日记</text>
</view>
<view class="home-header-btn" @click="tophone">
<image class="home-header-icon" src="/static/images/index_phone.png" mode="aspectFit"></image>
<text class="home-header-text">语音通话</text>
</view>
<view class="home-header-btn" @click="tovoicecall">
<image class="home-header-icon" src="/static/images/index_phone.png" mode="aspectFit"></image>
<text class="home-header-text">视频通话</text>
</view>
<view class="home-header-btn" @click="tointimacy">
<image class="home-header-icon" src="/static/images/index_intimate.png" mode="aspectFit"></image>
<text class="home-header-text">邀请入驻</text>
</view>
</view>
<!-- 选择互动对象 -->
<view class="home-title">
<text class="home-title-icon"></text>
<text class="home-title-text">选择一位互动对象</text>
<text class="home-title-icon"></text>
<text class="home-title-more" @click="toreplacement">搜索更多</text>
</view>
<!-- 主卡片区域 -->
<view class="home-card">
<view class="home-card-inner">
@ -2059,21 +2062,23 @@
});
},
tophone() {
// if (this.getBobbiesList.level >= 2) {
// uni.navigateTo({
// url: '/pages/chat/phone'
// });
// } else {
// uni.showToast({
// title: 'Lv.2',
// icon: 'none',
// position: 'top'
// });
// }
console.log('tophone 方法被调用');
uni.navigateTo({
url: '/pages/chat/phone'
});
},
todiary() {
console.log('todiary 方法被调用');
uni.navigateTo({
url: '/pages/chat/diary'
});
},
tovoicecall() {
console.log('tovoicecall 方法被调用');
uni.navigateTo({
url: '/pages/chat/voiceCall'
});
},
togift() {
uni.navigateTo({
url: '/pages/index/gift'
@ -2226,12 +2231,30 @@
OutfitList({}).then(res => {
if (res && res.code == 1 && res.data) {
this.homeLooksList = res.data.looks || [];
//
if (this.homeLooksList.length > 0) {
// 使
const currentLook = this.homeLooksList.find(look => look.is_current);
if (currentLook) {
// 使
this.selectedLookId = currentLook.id;
this.currentLookImageUrl = currentLook.image_url;
this.chatLoverAvatar = currentLook.image_url;
//
if (this.loverBasicList) {
this.loverBasicList.image_url = currentLook.image_url;
}
} else if (this.homeLooksList.length > 0) {
//
this.selectedLookId = this.homeLooksList[0].id;
this.currentLookImageUrl = this.homeLooksList[0].image_url;
//
this.chatLoverAvatar = this.homeLooksList[0].image_url;
//
if (this.loverBasicList) {
this.loverBasicList.image_url = this.homeLooksList[0].image_url;
}
}
}
}).catch(err => {
@ -2243,6 +2266,12 @@
switchLook(look) {
if (!look || !look.id) return;
//
this.selectedLookId = look.id;
if (this.loverBasicList) {
this.loverBasicList.image_url = look.image_url;
}
// API
uni.request({
url: baseURLPy + '/outfit/looks/use/' + look.id,
@ -2252,21 +2281,16 @@
},
success: (res) => {
if (res.data && res.data.code === 1) {
this.selectedLookId = look.id;
this.currentLookImageUrl = look.image_url;
//
this.chatLoverAvatar = look.image_url;
//
this.loverBasic();
uni.showToast({
title: '形象切换成功',
icon: 'success',
duration: 1500
});
//
} else {
//
this.loverBasic();
uni.showToast({
title: res.data.msg || '切换失败',
icon: 'none',
@ -2276,6 +2300,8 @@
},
fail: (err) => {
console.error('切换形象失败:', err);
//
this.loverBasic();
uni.showToast({
title: '切换失败,请重试',
icon: 'none',
@ -5110,21 +5136,33 @@
.home-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20rpx 0;
margin-bottom: 20rpx;
overflow-x: auto;
overflow-y: hidden;
gap: 15rpx;
/* 隐藏滚动条 */
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE 10+ */
}
.home-header::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
.home-header-btn {
display: flex;
flex-direction: column;
align-items: center;
gap: 8rpx;
padding: 10rpx 15rpx;
justify-content: center;
gap: 6rpx;
padding: 12rpx 16rpx;
background: rgba(255, 255, 255, 0.8);
border-radius: 16rpx;
transition: all 0.3s ease;
box-shadow: 0 2rpx 8rpx rgba(159, 71, 255, 0.1);
min-width: 100rpx;
flex-shrink: 0;
}
.home-header-btn:active {
@ -5133,17 +5171,16 @@
}
.home-header-icon {
width: 40rpx;
height: 40rpx;
width: 44rpx;
height: 44rpx;
object-fit: contain;
}
.home-header-text {
font-size: 22rpx;
color: #666;
}
.home-header-spacer {
flex: 1;
white-space: nowrap;
text-align: center;
}
/* 选择互动对象标题 */

View File

@ -1,263 +0,0 @@
@echo off
chcp 65001 >nul
title AI 女友项目 - 启动服务 (改进版)
REM ==========================================
REM 配置区域
REM ==========================================
set PHP_PATH=D:\2_part\php-8.0.0-Win32-vs16-x64\php.exe
set PHP_PORT=30100
set PYTHON_PORT=30101
REM ==========================================
REM 检查 MySQL 是否运行
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ AI 女友项目 - 启动服务 ║
echo ╚════════════════════════════════════╝
echo.
echo [检查] 正在检查 MySQL 服务...
netstat -ano | findstr :3306 >nul 2>&1
if errorlevel 1 (
echo [警告] MySQL 服务未运行(端口 3306 未监听)
echo.
echo 请先启动 MySQL 服务,否则 PHP 应用可能无法正常工作
echo.
set /p CONTINUE=是否继续启动?(Y/N):
if /i not "!CONTINUE!"=="Y" (
echo.
echo 已取消启动
pause
exit /b 1
)
) else (
echo [成功] MySQL 服务正在运行
)
echo.
REM ==========================================
REM 清理旧的服务进程
REM ==========================================
echo [清理] 正在检查并清理旧的服务进程...
echo.
REM 查找占用 30100 端口的进程并终止
echo [清理] 检查端口 30100...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :30100 2^>nul') do (
echo [清理] 终止进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
REM 查找占用 30101 端口的进程并终止
echo [清理] 检查端口 30101...
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :30101 2^>nul') do (
echo [清理] 终止进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
)
echo.
echo [成功] 端口清理完成
echo.
REM 等待端口完全释放
echo [等待] 等待端口释放3秒...
timeout /t 3 >nul
echo.
REM ==========================================
REM 检查 PHP
REM ==========================================
echo [检查] 正在检查 PHP...
if not exist "%PHP_PATH%" (
echo [错误] PHP 未找到: %PHP_PATH%
echo.
echo 请修改脚本中的 PHP_PATH 变量
echo.
pause
exit /b 1
)
"%PHP_PATH%" -v >nul 2>&1
if errorlevel 1 (
echo [错误] PHP 无法运行
pause
exit /b 1
)
echo [成功] PHP 已就绪
echo.
REM ==========================================
REM 检查 Python
REM ==========================================
echo [检查] 正在检查 Python...
python --version >nul 2>&1
if errorlevel 1 (
echo [错误] Python 未找到或未添加到 PATH
echo.
pause
exit /b 1
)
echo [成功] Python 已就绪
echo.
REM ==========================================
REM 检查项目目录
REM ==========================================
echo [检查] 正在检查项目目录...
if not exist "%~dp0xunifriend_RaeeC\public" (
echo [错误] PHP 项目目录未找到
pause
exit /b 1
)
if not exist "%~dp0lover" (
echo [错误] Python 项目目录未找到
pause
exit /b 1
)
echo [成功] 项目目录已就绪
echo.
REM ==========================================
REM 获取本机 IP
REM ==========================================
for /f "tokens=2 delims=:" %%a in ('ipconfig ^| findstr /C:"IPv4"') do (
set LOCAL_IP=%%a
goto :IP_FOUND
)
:IP_FOUND
set LOCAL_IP=%LOCAL_IP: =%
REM ==========================================
REM 显示启动信息
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ AI 女友项目 - 启动服务 ║
echo ╚════════════════════════════════════╝
echo.
echo 准备启动以下服务:
echo.
echo [PHP 服务器]
echo → 端口: %PHP_PORT%
echo → 本地: http://127.0.0.1:%PHP_PORT%
echo → 测试: http://127.0.0.1:%PHP_PORT%/test_api.php
echo → 局域网: http://%LOCAL_IP%:%PHP_PORT%
echo.
echo [Python 后端]
echo → 端口: %PYTHON_PORT%
echo → 本地: http://127.0.0.1:%PYTHON_PORT%
echo → 局域网: http://%LOCAL_IP%:%PYTHON_PORT%
echo.
echo ────────────────────────────────────
echo.
echo 按任意键开始启动...
pause >nul
REM ==========================================
REM 启动 PHP 服务器(使用 router.php
REM ==========================================
cls
echo.
echo [1/2] 启动 PHP 服务器...
echo.
start "PHP 服务器 - 端口 %PHP_PORT%" cmd /k "title PHP 服务器 - 端口 %PHP_PORT% && cd /d "%~dp0xunifriend_RaeeC\public" && echo [PHP 服务器] 正在启动... && echo [PHP 服务器] 端口: %PHP_PORT% && echo [PHP 服务器] 访问: http://127.0.0.1:%PHP_PORT% && echo [PHP 服务器] 测试: http://127.0.0.1:%PHP_PORT%/test_api.php && echo. && "%PHP_PATH%" -S 0.0.0.0:%PHP_PORT% router.php"
echo [成功] PHP 服务器已启动
echo.
REM 等待 5 秒让 PHP 完全启动
echo 等待 PHP 服务器启动5秒...
timeout /t 5 >nul
REM ==========================================
REM 测试 PHP 服务器
REM ==========================================
echo.
echo [测试] 正在测试 PHP 服务器...
echo.
powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://127.0.0.1:%PHP_PORT%/test_api.php' -TimeoutSec 5; if ($response.StatusCode -eq 200) { Write-Host '[成功] PHP 服务器响应正常' -ForegroundColor Green } else { Write-Host '[警告] PHP 服务器响应异常' -ForegroundColor Yellow } } catch { Write-Host '[错误] PHP 服务器无响应' -ForegroundColor Red; Write-Host $_.Exception.Message -ForegroundColor Red }"
echo.
set /p CONTINUE_PYTHON=PHP 服务器已启动,是否继续启动 Python 后端?(Y/N):
if /i not "%CONTINUE_PYTHON%"=="Y" (
echo.
echo 已取消 Python 后端启动
echo.
echo 按任意键退出...
pause >nul
exit /b 0
)
REM ==========================================
REM 启动 Python 后端
REM ==========================================
echo.
echo [2/2] 启动 Python 后端...
echo.
start "Python 后端 - 端口 %PYTHON_PORT%" cmd /k "title Python 后端 - 端口 %PYTHON_PORT% && cd /d "%~dp0" && echo [Python 后端] 正在启动... && echo [Python 后端] 端口: %PYTHON_PORT% && echo [Python 后端] 访问: http://127.0.0.1:%PYTHON_PORT% && echo [Python 后端] API 文档: http://127.0.0.1:%PYTHON_PORT%/docs && echo. && python -m uvicorn lover.main:app --host 0.0.0.0 --port %PYTHON_PORT% --reload"
echo [成功] Python 后端已启动
echo.
REM 等待 3 秒让 Python 完全启动
echo 等待 Python 后端启动3秒...
timeout /t 3 >nul
REM ==========================================
REM 显示完成信息
REM ==========================================
cls
echo.
echo ╔════════════════════════════════════╗
echo ║ 启动成功! ║
echo ╚════════════════════════════════════╝
echo.
echo [PHP 服务器] ✓ 已启动
echo → http://127.0.0.1:%PHP_PORT%
echo → http://127.0.0.1:%PHP_PORT%/test_api.php (测试)
echo → http://127.0.0.1:%PHP_PORT%/admin
echo → http://%LOCAL_IP%:%PHP_PORT%
echo.
echo [Python 后端] ✓ 已启动
echo → http://127.0.0.1:%PYTHON_PORT%
echo → http://127.0.0.1:%PYTHON_PORT%/docs
echo → http://%LOCAL_IP%:%PYTHON_PORT%
echo.
echo ────────────────────────────────────
echo.
echo 提示:
echo • 两个服务已在独立窗口中启动
echo • 可以在窗口中查看运行日志
echo • 关闭对应窗口可停止服务
echo • 如果 PHP API 超时,请检查 MySQL 是否运行
echo.
echo 按任意键打开浏览器测试...
pause >nul
REM ==========================================
REM 打开浏览器测试
REM ==========================================
start http://127.0.0.1:%PHP_PORT%/test_api.php
timeout /t 1 >nul
start http://127.0.0.1:%PYTHON_PORT%/docs
echo.
echo 浏览器已打开!
echo.
echo 按任意键退出(不影响服务运行)...
pause >nul
exit

View File

@ -1,91 +0,0 @@
===========================================
添加打电话按钮 - 代码补丁
===========================================
文件xuniYou/pages/index/index.vue
位置:约第 302-318 行(聊天输入框区域)
===========================================
步骤 1找到以下代码
===========================================
<!-- 底部输入框 -->
<view class="chat-input-bar">
<input
class="chat-message-input"
v-model="chatInputText"
placeholder="输入消息..."
confirm-type="send"
:adjust-position="true"
:hold-keyboard="false"
@confirm="sendChatMessage"
@blur="onInputBlur"
/>
<view class="chat-send-btn" @click="sendChatMessage">
<text>发送</text>
</view>
</view>
===========================================
步骤 2替换为以下代码
===========================================
<!-- 底部输入框 -->
<view class="chat-input-bar">
<!-- 打电话按钮 -->
<view class="chat-phone-btn" @click="tophone">
<image class="chat-phone-icon" src="/static/images/phone_a1.png" mode="aspectFit"></image>
</view>
<input
class="chat-message-input"
v-model="chatInputText"
placeholder="输入消息..."
confirm-type="send"
:adjust-position="true"
:hold-keyboard="false"
@confirm="sendChatMessage"
@blur="onInputBlur"
/>
<view class="chat-send-btn" @click="sendChatMessage">
<text>发送</text>
</view>
</view>
===========================================
步骤 3添加样式
===========================================
在 <style> 部分(约第 4916 行附近)的 .chat-input-bar 样式后面添加:
/* 打电话按钮 */
.chat-phone-btn {
width: 80rpx;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 50%;
margin-right: 20rpx;
flex-shrink: 0;
}
.chat-phone-icon {
width: 40rpx;
height: 40rpx;
}
===========================================
完成!
===========================================
保存文件后,重新编译前端项目。
测试步骤:
1. 打开应用
2. 进入聊天页面
3. 应该能看到输入框左侧有一个紫色的圆形按钮
4. 点击按钮进入语音通话页面
===========================================

View File

@ -1,87 +0,0 @@
@echo off
chcp 65001 >nul
title 清理端口 30100 和 30101
echo.
echo ╔════════════════════════════════════╗
echo ║ 清理端口 30100 和 30101 ║
echo ╚════════════════════════════════════╝
echo.
REM ==========================================
REM 清理端口 30100
REM ==========================================
echo [清理] 正在检查端口 30100...
echo.
set FOUND_30100=0
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :30100 2^>nul') do (
set FOUND_30100=1
echo [终止] 进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
if errorlevel 1 (
echo [警告] 无法终止进程 %%a
) else (
echo [成功] 已终止进程 %%a
)
)
if %FOUND_30100%==0 (
echo [信息] 端口 30100 未被占用
)
echo.
REM ==========================================
REM 清理端口 30101
REM ==========================================
echo [清理] 正在检查端口 30101...
echo.
set FOUND_30101=0
for /f "tokens=5" %%a in ('netstat -ano ^| findstr :30101 2^>nul') do (
set FOUND_30101=1
echo [终止] 进程 PID: %%a
taskkill /F /PID %%a >nul 2>&1
if errorlevel 1 (
echo [警告] 无法终止进程 %%a
) else (
echo [成功] 已终止进程 %%a
)
)
if %FOUND_30101%==0 (
echo [信息] 端口 30101 未被占用
)
echo.
echo ────────────────────────────────────
echo.
echo [完成] 端口清理完成!
echo.
REM 等待端口完全释放
echo [等待] 等待端口完全释放3秒...
timeout /t 3 >nul
echo.
echo [验证] 验证端口状态...
echo.
netstat -ano | findstr :30100
if errorlevel 1 (
echo [✓] 端口 30100 已释放
) else (
echo [✗] 端口 30100 仍被占用
)
netstat -ano | findstr :30101
if errorlevel 1 (
echo [✓] 端口 30101 已释放
) else (
echo [✗] 端口 30101 仍被占用
)
echo.
echo 按任意键退出...
pause >nul

View File

@ -1,82 +0,0 @@
@echo off
chcp 65001 >nul
title 诊断 PHP 服务器问题
echo.
echo ╔════════════════════════════════════╗
echo ║ 诊断 PHP 服务器问题 ║
echo ╚════════════════════════════════════╝
echo.
REM ==========================================
REM 1. 检查 MySQL 服务
REM ==========================================
echo [1/5] 检查 MySQL 服务...
echo.
netstat -ano | findstr :3306 >nul 2>&1
if errorlevel 1 (
echo [✗] MySQL 服务未运行(端口 3306 未监听)
echo.
echo 这可能是导致 PHP API 超时的原因!
echo 请启动 MySQL 服务后再试。
echo.
) else (
echo [✓] MySQL 服务正在运行
echo.
)
REM ==========================================
REM 2. 检查 PHP 服务器
REM ==========================================
echo [2/5] 检查 PHP 服务器...
echo.
netstat -ano | findstr :30100 >nul 2>&1
if errorlevel 1 (
echo [✗] PHP 服务器未运行(端口 30100 未监听)
echo.
) else (
echo [✓] PHP 服务器正在运行
echo.
)
REM ==========================================
REM 3. 测试 PHP 基本响应
REM ==========================================
echo [3/5] 测试 PHP 基本响应...
echo.
powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://127.0.0.1:30100/test_api.php' -TimeoutSec 5; Write-Host '[✓] PHP 服务器响应正常' -ForegroundColor Green; Write-Host '响应内容:' -ForegroundColor Cyan; $response.Content } catch { Write-Host '[✗] PHP 服务器无响应' -ForegroundColor Red; Write-Host '错误:' $_.Exception.Message -ForegroundColor Red }"
echo.
REM ==========================================
REM 4. 测试 PHP 调试接口
REM ==========================================
echo [4/5] 测试 PHP 调试接口(包含数据库检查)...
echo.
powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://127.0.0.1:30100/debug.php' -TimeoutSec 10; Write-Host '[✓] 调试接口响应正常' -ForegroundColor Green; Write-Host '响应内容:' -ForegroundColor Cyan; $response.Content } catch { Write-Host '[✗] 调试接口无响应' -ForegroundColor Red; Write-Host '错误:' $_.Exception.Message -ForegroundColor Red }"
echo.
REM ==========================================
REM 5. 测试实际 API
REM ==========================================
echo [5/5] 测试实际 API需要有效 token...
echo.
powershell -Command "try { $response = Invoke-WebRequest -Uri 'http://127.0.0.1:30100/api/user_basic/get_user_basic' -Headers @{'token'='test-token'} -TimeoutSec 10; Write-Host '[✓] API 响应正常' -ForegroundColor Green; Write-Host '响应内容:' -ForegroundColor Cyan; $response.Content } catch { Write-Host '[✗] API 无响应或返回错误' -ForegroundColor Yellow; Write-Host '错误:' $_.Exception.Message -ForegroundColor Yellow; Write-Host ''; Write-Host '这是正常的,因为使用了无效的 token' -ForegroundColor Gray }"
echo.
echo ════════════════════════════════════
echo.
echo 诊断完成!
echo.
echo 如果看到以下问题:
echo • MySQL 未运行 → 请启动 MySQL 服务
echo • PHP 服务器无响应 → 检查 PHP 启动窗口的错误信息
echo • 数据库连接失败 → 检查 xunifriend_RaeeC/.env 中的数据库配置
echo.
pause