彩票猪手1.1

This commit is contained in:
lihanqi
2025-08-05 18:14:59 +08:00
parent 653e84562f
commit d395295aa0
5 changed files with 90 additions and 118 deletions

View File

@@ -2,8 +2,8 @@ import axios from 'axios'
// 创建axios实例 // 创建axios实例
const api = axios.create({ const api = axios.create({
baseURL: 'http://localhost:8123/api', // baseURL: 'http://localhost:8123/api',
// baseURL: 'https://www.jingcaishuju.com/api', baseURL: 'https://www.jingcaishuju.com/api',
timeout: 300000, // 5分钟超时时间300秒 timeout: 300000, // 5分钟超时时间300秒
withCredentials: true, // 关键支持跨域携带cookie和session withCredentials: true, // 关键支持跨域携带cookie和session
headers: { headers: {

View File

@@ -38,7 +38,6 @@
@click="formData.level = pos.value" @click="formData.level = pos.value"
> >
<div class="position-title">{{ pos.label }}</div> <div class="position-title">{{ pos.label }}</div>
<div class="position-desc">{{ pos.desc }}</div>
</el-card> </el-card>
</div> </div>
@@ -176,31 +175,12 @@
<!-- 推测期号输入框 --> <!-- 推测期号输入框 -->
<div class="input-section"> <div class="input-section">
<label>请输入推测期号:</label> <label>推测期号:</label>
<el-select <el-input
v-model="formData.predictDrawId" v-model="formData.predictDrawId"
placeholder="请选择或输入推测期号" placeholder="自动填充"
filterable disabled
allow-create
default-first-option
:disabled="!formData.level"
clearable
class="draw-id-select" class="draw-id-select"
>
<el-option
v-for="item in predictDrawIdOptions"
:key="item"
:label="item"
:value="item"
/>
</el-select>
<el-alert
v-if="predictDrawIdError"
:title="predictDrawIdError"
type="error"
show-icon
:closable="false"
style="margin-top: 10px;"
/> />
</div> </div>
@@ -247,7 +227,7 @@
<div v-if="analyzedRedBalls.length > 0" class="balls-display"> <div v-if="analyzedRedBalls.length > 0" class="balls-display">
<el-alert <el-alert
type="success" type="success"
title="以下是推荐的首球号码" title="彩票猪手为您推荐了11个数据向好的红球请参考!"
:closable="false" :closable="false"
style="margin-bottom: 15px;" style="margin-bottom: 15px;"
/> />
@@ -396,7 +376,7 @@
<div v-if="followAnalyzedBalls.length > 0" class="balls-display"> <div v-if="followAnalyzedBalls.length > 0" class="balls-display">
<el-alert <el-alert
type="success" type="success"
title="以下是推荐的随球号码" title="彩票猪手为您推荐了8个数据向好的红球请参考!"
:closable="false" :closable="false"
style="margin-bottom: 15px;" style="margin-bottom: 15px;"
/> />
@@ -571,7 +551,7 @@
<div v-if="analyzedBlueBalls.length > 0" class="balls-display"> <div v-if="analyzedBlueBalls.length > 0" class="balls-display">
<el-alert <el-alert
type="success" type="success"
title="以下是推荐的篮球号码:" title="彩票猪手为您推荐了4个数据向好的蓝球请参考!"
:closable="false" :closable="false"
style="margin-bottom: 15px;" style="margin-bottom: 15px;"
class="blue-ball-alert" class="blue-ball-alert"
@@ -724,12 +704,12 @@
<!-- 成功提交弹窗 --> <!-- 成功提交弹窗 -->
<el-dialog <el-dialog
v-model="showSuccessModal" v-model="showSuccessModal"
title="推测记录提交成功" title="本次推测已完成"
width="500px" width="500px"
center center
> >
<Trophy class="success-icon" /> <Trophy class="success-icon" />
<p>您的第{{ formData.predictDrawId }}期推测号码已成功提交祝您好运</p> <p>您的第{{ formData.predictDrawId }}期推测号码已祝您好运</p>
<div class="success-balls"> <div class="success-balls">
<div class="success-red-balls"> <div class="success-red-balls">
<span class="ball-red">{{ String(formData.firstBall).padStart(2, '0') }}</span> <span class="ball-red">{{ String(formData.firstBall).padStart(2, '0') }}</span>
@@ -845,9 +825,9 @@ export default {
showFinalBlueBallSelector: false, // 最终蓝球选择弹窗显示状态 showFinalBlueBallSelector: false, // 最终蓝球选择弹窗显示状态
steps: ['推测准备', '推测首球', '推测随球', '推测蓝球', '确定推测'], steps: ['推测准备', '推测首球', '推测随球', '推测蓝球', '确定推测'],
positions: [ positions: [
{ value: 'H', label: '高位', desc: '高位投注算法' }, { value: 'H', label: '高位', desc: '高位投注算法' },
{ value: 'M', label: '中位', desc: '中位投注算法' }, { value: 'M', label: '中位', desc: '中位投注算法' },
{ value: 'L', label: '低位', desc: '低位投注算法' } { value: 'L', label: '低位', desc: '低位投注算法' }
], ],
formData: { formData: {
level: '', level: '',
@@ -868,7 +848,6 @@ export default {
agreeToTerms: false, // 用户服务协议勾选状态 agreeToTerms: false, // 用户服务协议勾选状态
recentDrawIds: [], // 存储近10期开奖期号 recentDrawIds: [], // 存储近10期开奖期号
drawIdOptions: [], // 用于el-select的选项 drawIdOptions: [], // 用于el-select的选项
predictDrawIdOptions: [], // 推测期号选项
latestDrawId: null // 最新开奖期号 latestDrawId: null // 最新开奖期号
} }
}, },
@@ -882,25 +861,13 @@ export default {
this.loadFormDataFromCache() this.loadFormDataFromCache()
}, },
computed: { computed: {
predictDrawIdError() {
if (this.formData.predictDrawId && this.latestDrawId) {
if (parseInt(this.formData.predictDrawId, 10) <= parseInt(this.latestDrawId, 10)) {
return `推测期号必须晚于最新开奖期号 ${this.latestDrawId}`;
}
}
return '';
},
canProceedStep1() { canProceedStep1() {
const isPredictDrawIdValid = this.formData.predictDrawId &&
this.latestDrawId &&
parseInt(this.formData.predictDrawId, 10) > parseInt(this.latestDrawId, 10);
return this.userVerified && return this.userVerified &&
this.formData.level && this.formData.level &&
this.formData.drawId && this.formData.drawId &&
this.formData.lastRedBalls.every(ball => ball !== '') && this.formData.lastRedBalls.every(ball => ball !== '') &&
this.formData.lastBlueBall && this.formData.lastBlueBall &&
isPredictDrawIdValid; this.formData.predictDrawId;
}, },
canProceedStep2() { canProceedStep2() {
return this.formData.firstBall && this.formData.followBalls.every(ball => ball !== '') return this.formData.firstBall && this.formData.followBalls.every(ball => ball !== '')
@@ -1407,11 +1374,8 @@ export default {
if (this.recentDrawIds.length > 0) { if (this.recentDrawIds.length > 0) {
this.latestDrawId = this.recentDrawIds[0] this.latestDrawId = this.recentDrawIds[0]
const latestId = parseInt(this.latestDrawId, 10) const latestId = parseInt(this.latestDrawId, 10)
const options = [] // 自动设置推测期号为最新一期的下一期
for (let i = 1; i <= 11; i++) { this.formData.predictDrawId = String(latestId + 1)
options.push(String(latestId + i))
}
this.predictDrawIdOptions = options
} }
} else { } else {
this.showMessage('获取期号失败', response.message, 'error') this.showMessage('获取期号失败', response.message, 'error')
@@ -1682,7 +1646,6 @@ export default {
.position-title { .position-title {
font-weight: 600; font-weight: 600;
margin-bottom: 8px;
font-size: 16px; font-size: 16px;
color: #333; color: #333;
transition: all 0.3s; transition: all 0.3s;
@@ -1754,11 +1717,6 @@ export default {
box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3) !important; box-shadow: 0 4px 12px rgba(33, 150, 243, 0.3) !important;
} }
.blue-ball-display.selected {
background: linear-gradient(135deg, #4caf50, #66bb6a) !important;
box-shadow: 0 3px 8px rgba(76, 175, 80, 0.3) !important;
}
.blue-option { .blue-option {
background: #e3f2fd !important; background: #e3f2fd !important;
color: #1976d2 !important; color: #1976d2 !important;
@@ -1799,11 +1757,6 @@ export default {
box-shadow: 0 5px 15px rgba(229, 62, 62, 0.4); box-shadow: 0 5px 15px rgba(229, 62, 62, 0.4);
} }
.ball-number-display.selected {
background: linear-gradient(135deg, #4caf50, #66bb6a);
box-shadow: 0 3px 8px rgba(76, 175, 80, 0.3);
}
.ball-number-display.disabled { .ball-number-display.disabled {
background: linear-gradient(135deg, #e0e0e0, #bdbdbd); background: linear-gradient(135deg, #e0e0e0, #bdbdbd);
color: #999; color: #999;
@@ -1826,16 +1779,6 @@ export default {
box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3) !important; box-shadow: 0 4px 12px rgba(229, 62, 62, 0.3) !important;
} }
/* 红球选中状态 */
.red-balls-selector .ball-number-display.selected,
.first-ball-selector .ball-number-display.selected,
.follow-balls-selector .ball-number-display.selected,
.first-ball-display .ball-number-display.selected,
.selected-balls-selector .ball-number-display.selected {
background: linear-gradient(135deg, #4caf50, #66bb6a) !important;
box-shadow: 0 3px 8px rgba(76, 175, 80, 0.3) !important;
}
/* 首球选择器样式 */ /* 首球选择器样式 */
.first-ball-selector { .first-ball-selector {
display: flex; display: flex;

View File

@@ -168,7 +168,7 @@
<div class="table-wrapper"> <div class="table-wrapper">
<div class="table-title-row"> <div class="table-title-row">
<div class="table-title-cell"> <div class="table-title-cell">
<span class="highlight-ball">{{masterBall}}</span>{{isMasterRed() ? '红' : '蓝'}}球与<span class="highlight-ball">{{slaveBall}}</span>{{isSlaveRed() ? '红' : '蓝'}}球接续性分析报告 <span class="highlight-ball" :class="{ 'blue-text': !isMasterRed() }">{{masterBall}}</span>{{isMasterRed() ? '红' : '蓝'}}球与<span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{slaveBall}}</span>{{isSlaveRed() ? '红' : '蓝'}}球接续性分析报告
</div> </div>
</div> </div>
<table class="analysis-table"> <table class="analysis-table">
@@ -178,26 +178,26 @@
<td class="value-cell">{{resultData[0]?.latestDrawId || '-'}}</td> <td class="value-cell">{{resultData[0]?.latestDrawId || '-'}}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">两号接续系数</td> <td class="label-cell">两号接续系数</td>
<td class="value-cell">{{resultData[0]?.lineCoefficient || '-'}}</td> <td class="value-cell">{{resultData[0]?.lineCoefficient || '-'}}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组最高系数球号及系数</td> <td class="label-cell">同号组最高系数球号及系数</td>
<td class="value-cell"> <td class="value-cell">
<span class="highlight-ball">{{resultData[0]?.highestBall || '--'}}</span> <span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{resultData[0]?.highestBall || '--'}}</span>
<span class="coefficient-value">{{resultData[0]?.highestCoefficient || '-'}}</span> <span class="coefficient-value">{{resultData[0]?.highestCoefficient || '-'}}</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组最低系数球号及系数</td> <td class="label-cell">同号组最低系数球号及系数</td>
<td class="value-cell"> <td class="value-cell">
<span class="highlight-ball">{{resultData[0]?.lowestBall || '--'}}</span> <span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{resultData[0]?.lowestBall || '--'}}</span>
<span class="coefficient-value">{{resultData[0]?.lowestCoefficient || '-'}}</span> <span class="coefficient-value">{{resultData[0]?.lowestCoefficient || '-'}}</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组平均系数</td> <td class="label-cell">同号组平均系数</td>
<td class="value-cell">{{resultData[0]?.averageCoefficient || '-'}}</td> <td class="value-cell">{{ (resultData[0]?.averageCoefficient && Number(resultData[0].averageCoefficient).toFixed(2)) || '-' }}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">建议</td> <td class="label-cell">建议</td>
@@ -689,10 +689,14 @@ export default {
.highlight-ball { .highlight-ball {
color: #e74c3c; color: #e74c3c;
font-weight: normal; font-weight: bold;
margin-right: 8px; margin-right: 8px;
} }
.highlight-ball.blue-text {
color: #3498db; /* 蓝色文字 */
}
.coefficient-value { .coefficient-value {
font-weight: normal; font-weight: normal;
color: #333; color: #333;

View File

@@ -65,6 +65,14 @@
<!-- 号码选择和分析区域 --> <!-- 号码选择和分析区域 -->
<el-card v-if="analysisType" class="analysis-container" shadow="never"> <el-card v-if="analysisType" class="analysis-container" shadow="never">
<el-alert
v-if="selectionError"
:title="selectionError"
type="warning"
show-icon
@close="selectionError = null"
style="margin-bottom: 20px;"
/>
<div class="number-selection"> <div class="number-selection">
<h3>{{ getSelectionTitle() }}</h3> <h3>{{ getSelectionTitle() }}</h3>
@@ -153,7 +161,7 @@
<div class="table-wrapper"> <div class="table-wrapper">
<div class="table-title-row"> <div class="table-title-row">
<div class="table-title-cell"> <div class="table-title-cell">
<span class="highlight-ball">{{masterBall}}</span>{{isMasterRed() ? '红' : '蓝'}}球与<span class="highlight-ball">{{slaveBall}}</span>{{isSlaveRed() ? '红' : '蓝'}}球组合性分析报告 <span class="highlight-ball" :class="{ 'blue-text': !isMasterRed() }">{{masterBall}}</span>{{isMasterRed() ? '红' : '蓝'}}球与<span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{slaveBall}}</span>{{isSlaveRed() ? '红' : '蓝'}}球组合性分析报告
</div> </div>
</div> </div>
<table class="analysis-table"> <table class="analysis-table">
@@ -163,26 +171,26 @@
<td class="value-cell">{{resultData[0]?.latestDrawId || '-'}}</td> <td class="value-cell">{{resultData[0]?.latestDrawId || '-'}}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">两号组合系数</td> <td class="label-cell">两号组合系数</td>
<td class="value-cell">{{resultData[0]?.faceCoefficient || '-'}}</td> <td class="value-cell">{{resultData[0]?.faceCoefficient || '-'}}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组最高系数球号及系数</td> <td class="label-cell">同号组最高系数球号及系数</td>
<td class="value-cell"> <td class="value-cell">
<span class="highlight-ball">{{resultData[0]?.highestBall || '--'}}</span> <span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{resultData[0]?.highestBall || '--'}}</span>
<span class="coefficient-value">{{resultData[0]?.highestCoefficient || '-'}}</span> <span class="coefficient-value">{{resultData[0]?.highestCoefficient || '-'}}</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组最低系数球号及系数</td> <td class="label-cell">同号组最低系数球号及系数</td>
<td class="value-cell"> <td class="value-cell">
<span class="highlight-ball">{{resultData[0]?.lowestBall || '--'}}</span> <span class="highlight-ball" :class="{ 'blue-text': !isSlaveRed() }">{{resultData[0]?.lowestBall || '--'}}</span>
<span class="coefficient-value">{{resultData[0]?.lowestCoefficient || '-'}}</span> <span class="coefficient-value">{{resultData[0]?.lowestCoefficient || '-'}}</span>
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">同号组平均系数</td> <td class="label-cell">同号组平均系数</td>
<td class="value-cell">{{resultData[0]?.averageCoefficient || '-'}}</td> <td class="value-cell">{{ (resultData[0]?.averageCoefficient && Number(resultData[0].averageCoefficient).toFixed(2)) || '-' }}</td>
</tr> </tr>
<tr> <tr>
<td class="label-cell">建议</td> <td class="label-cell">建议</td>
@@ -287,7 +295,8 @@ export default {
slaveBall: null, slaveBall: null,
loading: false, loading: false,
result: null, result: null,
error: null error: null,
selectionError: null
} }
}, },
computed: { computed: {
@@ -331,6 +340,7 @@ export default {
this.slaveBall = null this.slaveBall = null
this.result = null this.result = null
this.error = null this.error = null
this.selectionError = null
}, },
getSelectionTitle() { getSelectionTitle() {
@@ -383,15 +393,25 @@ export default {
}, },
selectMasterBall(num) { selectMasterBall(num) {
if (this.analysisType === 'red-red' && num === this.slaveBall) {
this.selectionError = '主球和随球不能是同一个号码'
return
}
this.masterBall = num this.masterBall = num
this.result = null this.result = null
this.error = null this.error = null
this.selectionError = null
}, },
selectSlaveBall(num) { selectSlaveBall(num) {
if (this.analysisType === 'red-red' && num === this.masterBall) {
this.selectionError = '主球和随球不能是同一个号码'
return
}
this.slaveBall = num this.slaveBall = num
this.result = null this.result = null
this.error = null this.error = null
this.selectionError = null
}, },
async performAnalysis() { async performAnalysis() {
@@ -765,7 +785,12 @@ export default {
.highlight-ball { .highlight-ball {
color: #e74c3c; /* 红色文字 */ color: #e74c3c; /* 红色文字 */
font-weight: normal; font-weight: bold;
margin-right: 2px;
}
.highlight-ball.blue-text {
color: #3498db; /* 蓝色文字 */
} }
.coefficient-value { .coefficient-value {