879 lines
22 KiB
Vue
879 lines
22 KiB
Vue
<template>
|
||
<div class="surface-analysis">
|
||
<div class="header">
|
||
<!-- 返回按钮 -->
|
||
<div class="back-button-container">
|
||
<el-button @click="goBack" icon="ArrowLeft" size="medium">
|
||
返回
|
||
</el-button>
|
||
</div>
|
||
|
||
<h2>组合性分析</h2>
|
||
<p>号球组合分析,探寻左姻右缘</p>
|
||
</div>
|
||
|
||
<!-- 分析类型选择 -->
|
||
<div class="analysis-buttons">
|
||
<el-card
|
||
class="analysis-card"
|
||
:class="{ active: analysisType === 'front-front' }"
|
||
@click="selectAnalysisType('front-front')"
|
||
shadow="hover"
|
||
>
|
||
<div class="btn-icon">
|
||
<el-avatar class="red-ball-icon"></el-avatar>
|
||
<el-avatar class="red-ball-icon"></el-avatar>
|
||
</div>
|
||
<div class="btn-text">
|
||
<div class="btn-title">前区与前区</div>
|
||
<div class="btn-desc">前区组合分析</div>
|
||
</div>
|
||
</el-card>
|
||
|
||
<el-card
|
||
class="analysis-card"
|
||
:class="{ active: analysisType === 'front-back' }"
|
||
@click="selectAnalysisType('front-back')"
|
||
shadow="hover"
|
||
>
|
||
<div class="btn-icon">
|
||
<el-avatar class="red-ball-icon"></el-avatar>
|
||
<el-avatar class="blue-ball-icon"></el-avatar>
|
||
</div>
|
||
<div class="btn-text">
|
||
<div class="btn-title">前区与后区</div>
|
||
<div class="btn-desc">前后组合分析</div>
|
||
</div>
|
||
</el-card>
|
||
|
||
<el-card
|
||
class="analysis-card"
|
||
:class="{ active: analysisType === 'back-back' }"
|
||
@click="selectAnalysisType('back-back')"
|
||
shadow="hover"
|
||
>
|
||
<div class="btn-icon">
|
||
<el-avatar class="blue-ball-icon"></el-avatar>
|
||
<el-avatar class="blue-ball-icon"></el-avatar>
|
||
</div>
|
||
<div class="btn-text">
|
||
<div class="btn-title">后区与后区</div>
|
||
<div class="btn-desc">后区组合分析</div>
|
||
</div>
|
||
</el-card>
|
||
|
||
<el-card
|
||
class="analysis-card"
|
||
:class="{ active: analysisType === 'back-front' }"
|
||
@click="selectAnalysisType('back-front')"
|
||
shadow="hover"
|
||
>
|
||
<div class="btn-icon">
|
||
<el-avatar class="blue-ball-icon"></el-avatar>
|
||
<el-avatar class="red-ball-icon"></el-avatar>
|
||
</div>
|
||
<div class="btn-text">
|
||
<div class="btn-title">后区与前区</div>
|
||
<div class="btn-desc">后前组合分析</div>
|
||
</div>
|
||
</el-card>
|
||
</div>
|
||
|
||
<!-- 号码选择和分析区域 -->
|
||
<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">
|
||
<h3>{{ getSelectionTitle() }}</h3>
|
||
|
||
<!-- 主球选择 -->
|
||
<div class="ball-selection-group">
|
||
<el-divider>{{ getMasterBallLabel() }}</el-divider>
|
||
<div class="ball-grid">
|
||
<el-button
|
||
v-for="num in getMasterBallRange()"
|
||
:key="'master-' + num"
|
||
:class="{
|
||
active: masterBall === num,
|
||
'red-ball': isMasterFront(),
|
||
'blue-ball': !isMasterFront()
|
||
}"
|
||
:type="masterBall === num ? 'primary' : 'default'"
|
||
:plain="masterBall !== num"
|
||
circle
|
||
@click="selectMasterBall(num)"
|
||
>
|
||
{{ num }}
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 随球选择 -->
|
||
<div class="ball-selection-group">
|
||
<el-divider>{{ getSlaveBallLabel() }}</el-divider>
|
||
<div class="ball-grid">
|
||
<el-button
|
||
v-for="num in getSlaveBallRange()"
|
||
:key="'slave-' + num"
|
||
:class="{
|
||
active: slaveBall === num,
|
||
'red-ball': isSlaveFront(),
|
||
'blue-ball': !isSlaveFront()
|
||
}"
|
||
:type="slaveBall === num ? 'primary' : 'default'"
|
||
:plain="slaveBall !== num"
|
||
circle
|
||
@click="selectSlaveBall(num)"
|
||
>
|
||
{{ num }}
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 分析按钮 -->
|
||
<div class="analyze-section">
|
||
<el-button
|
||
type="success"
|
||
size="large"
|
||
round
|
||
:disabled="!canAnalyze || loading"
|
||
:loading="loading"
|
||
@click="performAnalysis"
|
||
>
|
||
{{ loading ? '分析中...' : '开始分析' }}
|
||
</el-button>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 分析结果 -->
|
||
<div v-if="result !== null || error" class="result-container">
|
||
<el-alert
|
||
v-if="error"
|
||
:title="error"
|
||
type="error"
|
||
show-icon
|
||
:closable="false"
|
||
style="margin-bottom: 20px;"
|
||
>
|
||
<template #default>
|
||
<el-button @click="clearError" type="primary" size="small">重试</el-button>
|
||
</template>
|
||
</el-alert>
|
||
|
||
<el-result
|
||
v-else-if="result !== null"
|
||
icon="success"
|
||
title="组合性分析结果"
|
||
>
|
||
<template #extra>
|
||
<div class="result-details">
|
||
|
||
<div class="table-wrapper">
|
||
<div class="table-title-row">
|
||
<div class="table-title-cell">
|
||
<span class="highlight-ball" :class="{ 'blue-text': !isMasterFront() }">{{masterBall}}</span>号{{isMasterFront() ? '前区' : '后区'}}球与<span class="highlight-ball" :class="{ 'blue-text': !isSlaveFront() }">{{slaveBall}}</span>号{{isSlaveFront() ? '前区' : '后区'}}球组合性分析报告
|
||
</div>
|
||
</div>
|
||
<table class="analysis-table">
|
||
<tbody>
|
||
<tr>
|
||
<td class="label-cell">引用数据截至</td>
|
||
<td class="value-cell">{{resultData[0]?.latestDrawId || '-'}}期</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label-cell">两号组合系数</td>
|
||
<td class="value-cell">{{resultData[0]?.faceCoefficient || '-'}}</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label-cell">同号组最高系数球号及系数</td>
|
||
<td class="value-cell">
|
||
<span class="highlight-ball" :class="{ 'blue-text': !isSlaveFront() }">{{resultData[0]?.highestBall || '--'}}</span>
|
||
<span class="coefficient-value">{{resultData[0]?.highestCoefficient || '-'}}</span>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label-cell">同号组最低系数球号及系数</td>
|
||
<td class="value-cell">
|
||
<span class="highlight-ball" :class="{ 'blue-text': !isSlaveFront() }">{{resultData[0]?.lowestBall || '--'}}</span>
|
||
<span class="coefficient-value">{{resultData[0]?.lowestCoefficient || '-'}}</span>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label-cell">同号组平均系数</td>
|
||
<td class="value-cell">{{ (resultData[0]?.averageCoefficient && Number(resultData[0].averageCoefficient).toFixed(2)) || '-' }}</td>
|
||
</tr>
|
||
<tr>
|
||
<td class="label-cell">建议</td>
|
||
<td class="value-cell recommendation">
|
||
系数越高表示该此组合概率较高,高于平均系数的组合更值得关注。同时,可尝试寻找关联组合与交叉组合的共性规律。
|
||
</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<el-button type="primary" @click="resetAnalysis">重新分析</el-button>
|
||
</div>
|
||
</template>
|
||
</el-result>
|
||
</div>
|
||
</el-card>
|
||
|
||
<!-- 使用说明 -->
|
||
<el-card v-if="!analysisType" class="instruction-container" shadow="hover">
|
||
<template #header>
|
||
<div class="card-header">
|
||
<span><el-icon><InfoFilled /></el-icon> 组合性分析说明</span>
|
||
</div>
|
||
</template>
|
||
|
||
<el-collapse accordion>
|
||
<el-collapse-item title="前区与前区分析" name="front-front">
|
||
<div class="collapse-content">
|
||
<p>分析两个前区球号码之间的组合关系,计算前区配对的组合系数</p>
|
||
</div>
|
||
</el-collapse-item>
|
||
<el-collapse-item title="前区与后区分析" name="front-back">
|
||
<div class="collapse-content">
|
||
<p>分析前区与后区球号码的组合关系,计算前后配对的组合系数</p>
|
||
</div>
|
||
</el-collapse-item>
|
||
<el-collapse-item title="后区与后区分析" name="back-back">
|
||
<div class="collapse-content">
|
||
<p>分析两个后区球号码之间的组合关系,计算后区配对的组合系数</p>
|
||
</div>
|
||
</el-collapse-item>
|
||
<el-collapse-item title="后区与前区分析" name="back-front">
|
||
<div class="collapse-content">
|
||
<p>分析后区与前区球号码的组合关系,计算后前配对的组合系数</p>
|
||
</div>
|
||
</el-collapse-item>
|
||
</el-collapse>
|
||
|
||
<el-alert
|
||
type="info"
|
||
show-icon
|
||
:closable="false"
|
||
style="margin-top: 20px;"
|
||
>
|
||
<template #title>
|
||
<span>选择分析类型后,依次选择主球和随球号码,点击"开始分析"获取组合系数值</span>
|
||
</template>
|
||
</el-alert>
|
||
</el-card>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { dltLotteryApi } from '@/api/dlt'
|
||
export default {
|
||
name: 'DltSurfaceAnalysis',
|
||
data() {
|
||
return {
|
||
analysisType: '', // 'front-front', 'front-back', 'back-back', 'back-front'
|
||
masterBall: null,
|
||
slaveBall: null,
|
||
loading: false,
|
||
result: null,
|
||
error: null,
|
||
selectionError: null
|
||
}
|
||
},
|
||
computed: {
|
||
canAnalyze() {
|
||
return this.masterBall !== null && this.slaveBall !== null && this.analysisType
|
||
},
|
||
|
||
resultData() {
|
||
if (!this.result) return [];
|
||
|
||
try {
|
||
const data = typeof this.result === 'string' ? JSON.parse(this.result) : this.result;
|
||
|
||
return [{
|
||
latestDrawId: data.latestDrawId || '',
|
||
faceCoefficient: data.faceCoefficient || 0,
|
||
highestCoefficient: data.highestCoefficient || 0,
|
||
lowestCoefficient: data.lowestCoefficient || 0,
|
||
averageCoefficient: data.averageCoefficient || 0,
|
||
highestBall: data.highestBall || '-',
|
||
lowestBall: data.lowestBall || '-'
|
||
}];
|
||
} catch (e) {
|
||
console.error('解析结果数据失败', e);
|
||
return [{
|
||
latestDrawId: '',
|
||
faceCoefficient: 0,
|
||
highestCoefficient: 0,
|
||
lowestCoefficient: 0,
|
||
averageCoefficient: 0,
|
||
highestBall: '-',
|
||
lowestBall: '-'
|
||
}];
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
// 返回上一页
|
||
goBack() {
|
||
// 获取当前彩票类型,优先使用路由参数,否则使用默认值 'dlt'
|
||
const lotteryType = this.$route.query.lotteryType || 'dlt'
|
||
this.$router.push({
|
||
path: '/data-analysis',
|
||
query: { lotteryType: lotteryType }
|
||
})
|
||
},
|
||
|
||
selectAnalysisType(type) {
|
||
this.analysisType = type
|
||
this.masterBall = null
|
||
this.slaveBall = null
|
||
this.result = null
|
||
this.error = null
|
||
this.selectionError = null
|
||
},
|
||
|
||
getSelectionTitle() {
|
||
const titles = {
|
||
'front-front': '前区与前区组合分析(不能重复)',
|
||
'front-back': '前区与后区组合分析',
|
||
'back-back': '后区与后区组合分析(不能重复)',
|
||
'back-front': '后区与前区组合分析'
|
||
}
|
||
return titles[this.analysisType] || ''
|
||
},
|
||
|
||
getMasterBallLabel() {
|
||
const labels = {
|
||
'front-front': '主球(前区)',
|
||
'front-back': '主球(前区)',
|
||
'back-back': '主球(后区)',
|
||
'back-front': '主球(后区)'
|
||
}
|
||
return labels[this.analysisType] || ''
|
||
},
|
||
|
||
getSlaveBallLabel() {
|
||
const labels = {
|
||
'front-front': '随球(前区)',
|
||
'front-back': '随球(后区)',
|
||
'back-back': '随球(后区)',
|
||
'back-front': '随球(前区)'
|
||
}
|
||
return labels[this.analysisType] || ''
|
||
},
|
||
|
||
getMasterBallRange() {
|
||
if (this.analysisType === 'back-back' || this.analysisType === 'back-front') {
|
||
return Array.from({ length: 12 }, (_, i) => i + 1) // 1-12 后区
|
||
}
|
||
return Array.from({ length: 35 }, (_, i) => i + 1) // 1-35 前区
|
||
},
|
||
|
||
getSlaveBallRange() {
|
||
if (this.analysisType === 'front-back' || this.analysisType === 'back-back') {
|
||
return Array.from({ length: 12 }, (_, i) => i + 1) // 1-12 后区
|
||
}
|
||
return Array.from({ length: 35 }, (_, i) => i + 1) // 1-35 前区
|
||
},
|
||
|
||
isMasterFront() {
|
||
return this.analysisType === 'front-front' || this.analysisType === 'front-back'
|
||
},
|
||
|
||
isSlaveFront() {
|
||
return this.analysisType === 'front-front' || this.analysisType === 'back-front'
|
||
},
|
||
|
||
selectMasterBall(num) {
|
||
// 前区与前区、后区与后区不能选择相同号码
|
||
if ((this.analysisType === 'front-front' || this.analysisType === 'back-back') && num === this.slaveBall) {
|
||
this.selectionError = '主球和随球不能是同一个号码'
|
||
return
|
||
}
|
||
this.masterBall = num
|
||
this.result = null
|
||
this.error = null
|
||
this.selectionError = null
|
||
},
|
||
|
||
selectSlaveBall(num) {
|
||
// 前区与前区、后区与后区不能选择相同号码
|
||
if ((this.analysisType === 'front-front' || this.analysisType === 'back-back') && num === this.masterBall) {
|
||
this.selectionError = '主球和随球不能是同一个号码'
|
||
return
|
||
}
|
||
this.slaveBall = num
|
||
this.result = null
|
||
this.error = null
|
||
this.selectionError = null
|
||
},
|
||
|
||
async performAnalysis() {
|
||
if (!this.canAnalyze) return
|
||
|
||
this.loading = true
|
||
this.error = null
|
||
this.result = null
|
||
|
||
try {
|
||
let response
|
||
|
||
switch (this.analysisType) {
|
||
case 'front-front':
|
||
response = await dltLotteryApi.frontFrontCombinationAnalysis(this.masterBall, this.slaveBall)
|
||
break
|
||
case 'front-back':
|
||
response = await dltLotteryApi.frontBackCombinationAnalysis(this.masterBall, this.slaveBall)
|
||
break
|
||
case 'back-back':
|
||
response = await dltLotteryApi.backBackCombinationAnalysis(this.masterBall, this.slaveBall)
|
||
break
|
||
case 'back-front':
|
||
response = await dltLotteryApi.backFrontCombinationAnalysis(this.masterBall, this.slaveBall)
|
||
break
|
||
}
|
||
|
||
if (response.success) {
|
||
this.result = response.data
|
||
} else {
|
||
this.error = response.message || '分析失败'
|
||
}
|
||
} catch (error) {
|
||
console.error('组合系数分析失败:', error)
|
||
this.error = '网络请求失败,请重试'
|
||
} finally {
|
||
this.loading = false
|
||
}
|
||
},
|
||
|
||
clearError() {
|
||
this.error = null
|
||
},
|
||
|
||
resetAnalysis() {
|
||
this.masterBall = null
|
||
this.slaveBall = null
|
||
this.result = null
|
||
this.error = null
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.surface-analysis {
|
||
min-height: 100vh;
|
||
background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
|
||
padding: 20px;
|
||
}
|
||
|
||
.header {
|
||
text-align: center;
|
||
margin-bottom: 30px;
|
||
position: relative;
|
||
}
|
||
|
||
/* 返回按钮 */
|
||
.back-button-container {
|
||
position: absolute;
|
||
left: 20px;
|
||
top: 0;
|
||
}
|
||
|
||
.header h2 {
|
||
color: #2c3e50;
|
||
font-size: 28px;
|
||
margin-bottom: 10px;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.header p {
|
||
color: #7f8c8d;
|
||
font-size: 16px;
|
||
}
|
||
|
||
/* 分析类型卡片 */
|
||
.analysis-buttons {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||
gap: 20px;
|
||
margin-bottom: 20px;
|
||
max-width: 1000px;
|
||
margin-left: auto;
|
||
margin-right: auto;
|
||
}
|
||
|
||
.analysis-card {
|
||
cursor: pointer;
|
||
transition: all 0.3s ease;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
padding: 10px;
|
||
}
|
||
|
||
.analysis-card:hover {
|
||
transform: translateY(-5px);
|
||
box-shadow: 0 8px 25px rgba(52, 152, 219, 0.15);
|
||
border-color: #3498db;
|
||
}
|
||
|
||
.analysis-card.active {
|
||
background-color: #eaf5ff;
|
||
border-color: #3498db;
|
||
box-shadow: 0 8px 25px rgba(52, 152, 219, 0.2);
|
||
}
|
||
|
||
.analysis-card.active :deep(.el-card__body) {
|
||
background: transparent;
|
||
color: #303133;
|
||
}
|
||
|
||
/* 减少卡片内边距 */
|
||
:deep(.el-card__body) {
|
||
padding: 10px !important;
|
||
}
|
||
|
||
.btn-icon {
|
||
display: flex;
|
||
gap: 5px;
|
||
margin-bottom: 10px;
|
||
}
|
||
|
||
.red-ball-icon {
|
||
background-color: #e74c3c !important;
|
||
}
|
||
|
||
.blue-ball-icon {
|
||
background-color: #3498db !important;
|
||
}
|
||
|
||
.btn-title {
|
||
font-size: 16px;
|
||
font-weight: 600;
|
||
margin-bottom: 4px;
|
||
}
|
||
|
||
.btn-desc {
|
||
font-size: 14px;
|
||
opacity: 0.8;
|
||
}
|
||
|
||
.analysis-card.active .btn-title {
|
||
color: #2980b9;
|
||
}
|
||
|
||
.analysis-card.active .btn-desc {
|
||
color: #3498db;
|
||
}
|
||
|
||
|
||
|
||
.number-selection {
|
||
padding: 20px 0;
|
||
}
|
||
|
||
.number-selection h3 {
|
||
color: #2c3e50;
|
||
margin-bottom: 20px;
|
||
font-size: 20px;
|
||
text-align: center;
|
||
}
|
||
|
||
.ball-selection-group {
|
||
margin-bottom: 25px;
|
||
}
|
||
|
||
/* 球号网格 */
|
||
.ball-grid {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
gap: 10px;
|
||
justify-content: center;
|
||
margin-top: 15px;
|
||
padding: 0 15px;
|
||
}
|
||
|
||
/* 前区球(红球)和后区球(蓝球)按钮样式 */
|
||
:deep(.el-button.red-ball.is-plain:not(.is-disabled)) {
|
||
color: #e74c3c;
|
||
border-color: #e74c3c;
|
||
background-color: #fff5f5;
|
||
}
|
||
|
||
:deep(.el-button.red-ball:not(.is-plain):not(.is-disabled)) {
|
||
background-color: #e74c3c;
|
||
border-color: #c0392b;
|
||
}
|
||
|
||
:deep(.el-button.blue-ball.is-plain:not(.is-disabled)) {
|
||
color: #3498db;
|
||
border-color: #3498db;
|
||
background-color: #f0f8ff;
|
||
}
|
||
|
||
:deep(.el-button.blue-ball:not(.is-plain):not(.is-disabled)) {
|
||
background-color: #3498db;
|
||
border-color: #2980b9;
|
||
}
|
||
|
||
/* 分析按钮 */
|
||
.analyze-section {
|
||
text-align: center;
|
||
margin-top: 30px;
|
||
}
|
||
|
||
/* 结果容器 */
|
||
.result-container {
|
||
border-top: 2px solid #ecf0f1;
|
||
padding: 20px;
|
||
background: #f8f9fa;
|
||
}
|
||
|
||
:deep(.el-result) {
|
||
padding: 0px;
|
||
}
|
||
|
||
.result-details {
|
||
width: 100%;
|
||
max-width: 850px;
|
||
margin: 0 auto;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
}
|
||
|
||
.ball-combo {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 10px;
|
||
margin: 15px 0;
|
||
}
|
||
|
||
.combo-label {
|
||
font-size: 16px;
|
||
color: #2c3e50;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.combo-separator {
|
||
font-size: 20px;
|
||
color: #7f8c8d;
|
||
font-weight: bold;
|
||
}
|
||
|
||
.ball-tag {
|
||
padding: 8px 12px;
|
||
font-weight: 700;
|
||
font-size: 16px;
|
||
border-radius: 50%;
|
||
min-width: 40px;
|
||
}
|
||
|
||
.coefficient-result {
|
||
margin: 20px 0;
|
||
}
|
||
|
||
:deep(.el-statistic__head) {
|
||
margin-bottom: 10px;
|
||
font-size: 16px;
|
||
}
|
||
|
||
:deep(.el-statistic__content) {
|
||
font-size: 24px !important;
|
||
color: #e74c3c;
|
||
}
|
||
|
||
/* 使用说明 */
|
||
.instruction-container {
|
||
max-width: 850px;
|
||
margin: 0 auto;
|
||
}
|
||
|
||
.card-header {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
font-size: 18px;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.collapse-content {
|
||
padding: 10px;
|
||
color: #7f8c8d;
|
||
}
|
||
|
||
.table-wrapper {
|
||
width: 100%;
|
||
max-width: 500px;
|
||
margin: 0 auto 20px;
|
||
border-collapse: collapse;
|
||
}
|
||
|
||
.table-title-row {
|
||
width: 100%;
|
||
text-align: center;
|
||
border: 1px solid #000;
|
||
}
|
||
|
||
.table-title-cell {
|
||
padding: 8px;
|
||
font-weight: normal;
|
||
font-size: 15px;
|
||
color: #000;
|
||
background-color: #fff;
|
||
border-bottom: 1px solid #000;
|
||
}
|
||
|
||
.analysis-table {
|
||
width: 100%;
|
||
border-collapse: collapse;
|
||
border: 1px solid #000;
|
||
border-top: none;
|
||
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', '微软雅黑', Arial, sans-serif;
|
||
}
|
||
|
||
.analysis-table tr {
|
||
border-bottom: 1px solid #000;
|
||
}
|
||
|
||
.analysis-table tr:last-child {
|
||
border-bottom: none;
|
||
}
|
||
|
||
.label-cell {
|
||
width: 150px;
|
||
padding: 8px;
|
||
text-align: center;
|
||
font-weight: normal;
|
||
background-color: #f5f5f5;
|
||
border-right: 1px solid #000;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.value-cell {
|
||
padding: 8px;
|
||
text-align: center;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.value-cell .ball-number {
|
||
display: inline-block;
|
||
min-width: 30px;
|
||
text-align: right;
|
||
}
|
||
|
||
.value-cell .highlight-ball {
|
||
display: inline-block;
|
||
min-width: 30px;
|
||
text-align: left;
|
||
color: #e74c3c; /* 红色文字 */
|
||
font-weight: bold;
|
||
margin-right: 8px;
|
||
}
|
||
|
||
.highlight-ball {
|
||
color: #e74c3c; /* 红色文字 */
|
||
font-weight: bold;
|
||
margin-right: 2px;
|
||
}
|
||
|
||
.highlight-ball.blue-text {
|
||
color: #3498db; /* 蓝色文字 */
|
||
}
|
||
|
||
.coefficient-value {
|
||
font-weight: normal;
|
||
color: #333;
|
||
}
|
||
|
||
.value-cell .coefficient-value {
|
||
text-align: left;
|
||
display: inline-block;
|
||
}
|
||
|
||
.recommendation {
|
||
font-size: 13px;
|
||
line-height: 1.5;
|
||
color: #333;
|
||
text-align: left;
|
||
padding: 5px;
|
||
white-space: normal;
|
||
font-weight: normal;
|
||
}
|
||
|
||
.report-title {
|
||
font-size: 18px;
|
||
font-weight: bold;
|
||
color: #303133;
|
||
margin: 20px 0 15px;
|
||
text-align: center;
|
||
padding-bottom: 10px;
|
||
width: 100%;
|
||
max-width: 600px;
|
||
display: none; /* 隐藏原来的标题,使用表格自身的标题 */
|
||
}
|
||
|
||
/* 响应式设计 */
|
||
@media (max-width: 768px) {
|
||
.surface-analysis {
|
||
padding: 15px;
|
||
}
|
||
|
||
.back-button-container {
|
||
position: static;
|
||
text-align: left;
|
||
margin-bottom: 0px;
|
||
}
|
||
|
||
.header {
|
||
margin-bottom: 15px;
|
||
}
|
||
|
||
.analysis-buttons {
|
||
grid-template-columns: repeat(2, 1fr);
|
||
gap: 10px;
|
||
}
|
||
|
||
.btn-title {
|
||
font-size: 14px;
|
||
}
|
||
|
||
.btn-desc {
|
||
font-size: 12px;
|
||
}
|
||
|
||
.ball-grid {
|
||
gap: 8px;
|
||
padding: 0;
|
||
}
|
||
|
||
.table-wrapper {
|
||
max-width: 100%;
|
||
}
|
||
|
||
.table-title-cell {
|
||
font-size: 14px;
|
||
padding: 6px;
|
||
}
|
||
|
||
.label-cell, .value-cell {
|
||
padding: 6px;
|
||
font-size: 13px;
|
||
}
|
||
|
||
.recommendation {
|
||
font-size: 12px;
|
||
line-height: 1.4;
|
||
}
|
||
}
|
||
</style>
|