From 15b0fff86de13911d8e8055ebc273d0ce5dc8864 Mon Sep 17 00:00:00 2001 From: liwq <122639653@qq.com> Date: Fri, 23 Jan 2026 12:31:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8A=95=E6=B3=A8=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E5=99=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bocai.db | Bin 122880 -> 122880 bytes frontend/src/components/index.vue | 464 +++++++++++++++++- .../controller/LotteryResultController.java | 32 -- .../tem/bocai/controller/TestController.java | 38 -- 4 files changed, 437 insertions(+), 97 deletions(-) delete mode 100644 src/main/java/com/tem/bocai/controller/LotteryResultController.java delete mode 100644 src/main/java/com/tem/bocai/controller/TestController.java diff --git a/bocai.db b/bocai.db index 8107f705d535c70c124e58875be873310ddc9f27..2d18136bd7ef5d1aedad31a52223b643243a5745 100644 GIT binary patch delta 12742 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 delta 12407 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 JJ3Cp){{R { + console.log('更新图表数据'); updateChart1(); updateChart2(); }); } catch (err) { + console.error('获取图表数据失败:', err); error.value = '获取图表数据失败,请刷新页面重试'; - console.error('Error fetching chart data:', err); + // 使用默认数据 + console.log('使用默认数据'); + console.log('默认 chartData1.value:', chartData1.value); + console.log('默认 chartData2.value:', chartData2.value); + console.log('默认 chartLabels.value:', chartLabels.value); + + // 更新图表 + nextTick(() => { + console.log('使用默认数据更新图表'); + updateChart1(); + updateChart2(); + }); } finally { loading.value = false; } @@ -243,6 +294,145 @@ onMounted(() => { window.addEventListener('resize', handleResize); }); +// 处理登录 +async function handleLogin() { + loginError.value = ''; + loginLoading.value = true; + + try { + console.log('登录信息:', loginForm.value); + + // 验证表单 + if (!loginForm.value.username || !loginForm.value.password || !loginForm.value.loginUrl) { + loginError.value = '请填写完整登录信息'; + return; + } + + // 构建登录API地址 + const loginApiUrl = `http://localhost:8080/api/ocr/saveUserInfo`; + console.log('登录API地址:', loginApiUrl); + + // 调用登录API + const response = await axios.post(loginApiUrl, { + username: loginForm.value.username, + password: loginForm.value.password + }); + + // 处理登录结果 + if (response.data && response.data.code === 1) { + // 登录成功 + loginLoading.value = false; + loginDialogVisible.value = false; + isLoggedIn.value = true; + + // 更新用户名和账户余额 + username.value = loginForm.value.username; + accountBalance.value = response.data.balance || '¥10000.00'; + + // 保存登录信息(可选) + if (response.data.token) { + localStorage.setItem('token', response.data.token); + } + + // 重置表单 + loginForm.value = { + username: '', + password: '', + loginUrl: 'https://4701268539-esh.qdk63ayw8g.com' + }; + + console.log('登录成功:', response.data); + } else { + // 登录失败 + loginError.value = response.data.message || '登录失败,请检查输入信息'; + console.error('登录失败:', response.data); + } + + } catch (err) { + loginError.value = '登录失败,请检查网络连接或登录地址'; + console.error('登录失败:', err); + } finally { + loginLoading.value = false; + } +} + +// 处理退出登录 +function handleLogout() { + console.log('退出登录'); + isLoggedIn.value = false; + // 重置用户名和账户余额 + username.value = '用户名'; + accountBalance.value = '账户余额'; + // 清除登录状态 + localStorage.removeItem('token'); + // 这里可以添加其他清理逻辑 + // 1. 清除用户信息 + // 2. 重置相关数据 + // 3. 调用退出登录API(可选) +} + +// 处理确认按钮点击 +async function handleConfirm() { + console.log('确认按钮点击,止盈点:', input1.value, '止亏点:', input2.value); + + // 验证输入 + if (!input1.value || !input2.value) { + alert('请填写完整的止盈止亏点'); + return; + } + + try { + // 构建提交数据 + const submitData = { + winNum: input1.value, + loseNum: input2.value + }; + + console.log('提交数据:', submitData); + + // 调用后端API + const response = await axios.post('http://localhost:8080/api/ocr/saveUserInfo', submitData); + + // 处理响应结果 + if (response.data && response.data.code === 1) { + console.log('提交成功:', response.data); + alert('设置保存成功'); + } else { + console.error('提交失败:', response.data); + alert('设置保存失败: ' + (response.data.message || '未知错误')); + } + + } catch (err) { + console.error('提交失败:', err); + alert('设置保存失败,请检查网络连接'); + } +} + +// 处理停止按钮点击 +async function handleStop() { + console.log('停止按钮点击'); + + try { + // 调用后端停止API + const response = await axios.post('http://localhost:8080/api/ocr/saveUserInfo', { + onOff: 0 + }); + + // 处理响应结果 + if (response.data && response.data.code === 1) { + console.log('停止成功:', response.data); + alert('停止操作成功'); + } else { + console.error('停止失败:', response.data); + alert('停止操作失败: ' + (response.data.message || '未知错误')); + } + + } catch (err) { + console.error('停止失败:', err); + alert('停止操作失败,请检查网络连接'); + } +} + onUnmounted(() => { // 销毁图表 chart1.value?.dispose(); @@ -261,28 +451,65 @@ onUnmounted(() => { + + +
-
- +
-
- - + +
+ + +
@@ -354,7 +581,7 @@ onUnmounted(() => { display: flex; gap: 20px; width: 100%; - height: 100%; + min-height: 100vh; padding: 20px; box-sizing: border-box; } @@ -369,7 +596,6 @@ onUnmounted(() => { flex-direction: column; gap: 20px; height: 100%; - min-height: 100%; box-sizing: border-box; } @@ -512,6 +738,35 @@ onUnmounted(() => { transform: translateY(1px); } +/* 按钮组 */ +.button-group { + display: flex; + gap: 8px; +} + +/* 停止按钮 */ +.stop-button { + padding: 10px 16px; + background-color: #f44336; + color: white; + border: none; + border-radius: 4px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: background-color 0.2s ease; + white-space: nowrap; +} + +.stop-button:hover { + background-color: #d32f2f; +} + +.stop-button:active { + background-color: #b71c1c; + transform: translateY(1px); +} + /* 表格区域 */ .table-container { flex: 1; @@ -528,18 +783,16 @@ onUnmounted(() => { display: flex; flex-direction: column; gap: 30px; - height: 100%; - min-height: 100%; + min-height: 700px; box-sizing: border-box; } /* 图表区域 */ .chart-container { - flex: 1; display: flex; flex-direction: column; gap: 15px; - min-height: 0; + height: 300px; } .input-group label { @@ -685,6 +938,158 @@ onUnmounted(() => { overflow: hidden; } +/* 登录模态框 */ +.modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; +} + +.modal-content { + background-color: white; + border-radius: 8px; + box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15); + width: 90%; + max-width: 450px; + max-height: 80vh; + overflow-y: auto; +} + +.modal-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px; + border-bottom: 1px solid #e0e0e0; +} + +.modal-header h3 { + margin: 0; + color: #333; + font-size: 18px; + font-weight: 600; +} + +.modal-close { + background: none; + border: none; + font-size: 24px; + color: #999; + cursor: pointer; + padding: 0; + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: all 0.2s ease; +} + +.modal-close:hover { + background-color: #f5f5f5; + color: #666; +} + +.modal-body { + padding: 20px; +} + +.modal-error { + background-color: #ffebee; + color: #c62828; + padding: 12px; + border-radius: 4px; + margin-bottom: 20px; + font-size: 14px; +} + +.form-group { + margin-bottom: 20px; +} + +.form-group label { + display: block; + margin-bottom: 8px; + font-weight: 600; + color: #333; + font-size: 14px; +} + +.form-group input { + width: 100%; + padding: 10px 12px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 14px; + transition: border-color 0.2s ease; + box-sizing: border-box; +} + +.form-group input:focus { + outline: none; + border-color: #2196F3; + box-shadow: 0 0 0 2px rgba(33, 150, 243, 0.1); +} + +.form-actions { + display: flex; + justify-content: flex-end; + gap: 12px; + margin-top: 30px; + padding-top: 20px; + border-top: 1px solid #e0e0e0; +} + +.cancel-button { + padding: 10px 20px; + background-color: #f5f5f5; + color: #333; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s ease; +} + +.cancel-button:hover { + background-color: #e0e0e0; +} + +.submit-button { + padding: 10px 20px; + background-color: #2196F3; + color: white; + border: none; + border-radius: 4px; + font-size: 14px; + font-weight: 600; + cursor: pointer; + transition: background-color 0.2s ease; +} + +.submit-button:hover:not(:disabled) { + background-color: #1976D2; +} + +.submit-button:active:not(:disabled) { + background-color: #1565C0; + transform: translateY(1px); +} + +.submit-button:disabled { + background-color: #bdbdbd; + cursor: not-allowed; +} + /* 响应式布局 */ @media (max-width: 768px) { .main-container { @@ -702,5 +1107,10 @@ onUnmounted(() => { .chart-container { min-height: 300px; } + + .modal-content { + width: 95%; + margin: 20px; + } } \ No newline at end of file diff --git a/src/main/java/com/tem/bocai/controller/LotteryResultController.java b/src/main/java/com/tem/bocai/controller/LotteryResultController.java deleted file mode 100644 index a7c21d8..0000000 --- a/src/main/java/com/tem/bocai/controller/LotteryResultController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.tem.bocai.controller; - -import com.tem.bocai.entity.LotteryResult; -import com.tem.bocai.repository.LotteryResultRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.List; - -@RestController -@RequestMapping("/api/lottery") -public class LotteryResultController { - - @Autowired - private LotteryResultRepository lotteryResultRepository; - - // 获取所有彩票开奖结果 - @GetMapping("/results") - public List getAllLotteryResults() { - return lotteryResultRepository.findAll(); - } - - // 根据期号获取彩票开奖结果 - @GetMapping("/results/{issue}") - public LotteryResult getLotteryResultByIssue(@PathVariable String issue) { - return lotteryResultRepository.findAll() - .stream() - .filter(result -> result.getIssue().equals(issue)) - .findFirst() - .orElse(null); - } -} \ No newline at end of file diff --git a/src/main/java/com/tem/bocai/controller/TestController.java b/src/main/java/com/tem/bocai/controller/TestController.java deleted file mode 100644 index 345a55a..0000000 --- a/src/main/java/com/tem/bocai/controller/TestController.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.tem.bocai.controller; - -import com.tem.bocai.util.ImageOcrService; -import net.sourceforge.tess4j.TesseractException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RestController; - -import java.io.IOException; - -@RestController -public class TestController { - - - private final ImageOcrService imageOcrService; - - @Autowired - public TestController(ImageOcrService imageOcrService) { - - this.imageOcrService = imageOcrService; - } - - @GetMapping("/ocr/local") - public ResponseEntity ocrLocalImage(String imagePath) throws IOException, TesseractException { - imagePath = "b.jpg"; - String result = imageOcrService.ocrLocalImage(imagePath); - return ResponseEntity.ok(result); - } - - @GetMapping("/ocr/remote") - public ResponseEntity ocrRemoteImage(String imageUrl) throws IOException, TesseractException, InterruptedException { - imageUrl = "https://4701268539-esh.qdk63ayw8g.com/code"; - String result = imageOcrService.ocrRemoteImage(); - System.out.println("++++"+result); - return ResponseEntity.ok(result); - } -}