FA3-Datafetch/data/CN/688334.SH/report.html
2026-01-03 18:27:19 +08:00

445 lines
24 KiB
HTML

<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>688334.SH Financial Report</title>
<style>
:root {
--bg: #f5f6fa;
--card-bg: #ffffff;
--header-bg: #f7f8fb;
--section-bg: #f0f2f5;
--border: #e5e7eb;
--text-primary: #111827;
--text-secondary: #6b7280;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 32px;
background: var(--bg);
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
color: var(--text-primary);
line-height: 1.6;
}
.report-container {
max-width: 1280px;
margin: 0 auto;
background: var(--card-bg);
border-radius: 24px;
padding: 32px 40px;
box-shadow: 0 24px 60px rgba(15, 23, 42, 0.08);
}
h1 {
margin: 0 0 8px;
font-size: 28px;
font-weight: 600;
color: var(--text-primary);
}
p {
margin: 0 0 24px;
color: var(--text-secondary);
font-size: 0.95rem;
}
table {
width: 100%;
border-collapse: collapse;
background: var(--card-bg);
}
th,
td {
font-size: 0.95rem;
padding: 12px 16px;
border-bottom: 1px solid var(--border);
}
th {
font-weight: 600;
color: var(--text-secondary);
text-align: right;
background: var(--header-bg);
}
th:first-child,
td:first-child {
text-align: left;
}
.company-table th,
.company-table td {
text-align: left;
}
.metrics-table thead {
position: sticky;
top: 0;
z-index: 3;
}
.metrics-table thead th {
position: sticky;
top: 0;
z-index: 3;
background: var(--card-bg);
box-shadow: 0 10px 20px rgba(15, 23, 42, 0.08);
}
.metrics-table thead th:first-child {
left: 0;
z-index: 4;
box-shadow: 16px 0 24px rgba(15, 23, 42, 0.08);
}
.metrics-table th:first-child,
.metrics-table td:first-child {
width: 180px;
min-width: 180px;
}
.metrics-table tbody td:first-child {
position: sticky;
left: 0;
background: var(--card-bg);
font-weight: 600;
box-shadow: 16px 0 24px rgba(15, 23, 42, 0.04);
z-index: 2;
text-align: left;
}
.metrics-table tbody td:not(:first-child) {
text-align: right;
}
.metrics-table tr.other-assets-row td {
background: #fff7e0;
}
.metrics-table tr.other-assets-row td:first-child {
background: #fff7e0;
}
.metrics-table tbody tr:hover td {
background: #f4efff;
}
.section-row td {
background: #eef1f6;
font-weight: 600;
text-align: left;
border-bottom: 1px solid var(--border);
}
.metrics-table .section-row td:first-child {
position: sticky;
left: 0;
z-index: 2;
box-shadow: 16px 0 24px rgba(15, 23, 42, 0.08);
background: #eef1f6 !important;
}
.metrics-table .section-label {
color: var(--text-primary);
background: #eef1f6 !important;
}
.section-spacer {
background: #eef1f6;
}
.metric-name {
color: var(--text-secondary);
}
.table-container {
overflow-x: auto;
border: 1px solid var(--border);
border-radius: 16px;
margin-bottom: 24px;
}
.table-container table {
margin-bottom: 0;
min-width: 960px;
}
.table-gap {
height: 24px;
}
.no-data {
margin-top: 24px;
padding: 32px;
text-align: center;
border: 1px dashed var(--border);
border-radius: 16px;
color: var(--text-secondary);
font-size: 0.95rem;
}
.bg-green { background-color: #e6f7eb !important; }
.bg-red { background-color: #ffeef0 !important; }
.font-red { color: #d32f2f !important; }
.font-green { color: #1b873f !important; }
.font-blue { color: #2563eb !important; }
.italic { font-style: italic !important; }
@media (max-width: 768px) {
body { padding: 16px; }
.report-container { padding: 24px; }
table { font-size: 0.85rem; }
th,
td { padding: 10px 12px; }
}
</style>
</head>
<body>
<div class="report-container">
<h1>西高院 (688334.SH) - Financial Report</h1>
<p><em>Report generated on: 2026-01-03</em></p>
<table class="company-table">
<thead>
<tr>
<th>代码</th>
<th>简称</th>
<th>上市日期</th>
<th>PE</th>
<th>PB</th>
<th>股息率(%)</th>
</tr>
</thead>
<tbody>
<tr>
<td>688334.SH</td>
<td>西高院</td>
<td>2023-06-19</td>
<td>26.80</td>
<td>2.14</td>
<td>0.00%</td>
</tr>
</tbody>
</table>
<div class="table-gap"></div>
<table class="metrics-table" data-table="metrics" data-scrollable="true">
<thead>
<tr>
<th>指标</th>
<th>2025Q3</th><th>2024A</th><th>2023A</th><th>2022A</th><th>2021A</th><th>2020A</th><th>2019A</th>
</tr>
</thead>
<tbody>
<tr class="section-row"><td class="section-label">主要指标</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">ROE</td><td>6.91%</td><td>8.23%</td><td>5.39%</td><td>7.04%</td><td>4.74%</td><td>9.54%</td><td>18.05%</td></tr>
<tr><td class="metric-name">ROA</td><td>5.36%</td><td>6.45%</td><td>4.73%</td><td>5.78%</td><td>3.76%</td><td>5.10%</td><td>9.45%</td></tr>
<tr><td class="metric-name">ROCE/ROIC</td><td>7.86%</td><td>8.18%</td><td>4.71%</td><td>6.85%</td><td>5.53%</td><td>11.12%</td><td>20.30%</td></tr>
<tr><td class="metric-name">毛利率</td><td>55.09%</td><td>52.72%</td><td>47.67%</td><td>48.18%</td><td>39.31%</td><td>43.95%</td><td>43.85%</td></tr>
<tr><td class="metric-name">净利润率</td><td>30.34%</td><td>28.64%</td><td>26.97%</td><td>25.01%</td><td>18.24%</td><td>18.89%</td><td>23.76%</td></tr>
<tr><td class="metric-name">收入(亿)</td><td>6.51</td><td>7.98</td><td>6.02</td><td>5.21</td><td>4.47</td><td>3.45</td><td>4.00</td></tr>
<tr><td class="metric-name">收入增速</td><td>15.05%</td><td>32.60%</td><td>15.53%</td><td>16.54%</td><td>29.71%</td><td>-13.81%</td><td>-</td></tr>
<tr><td class="metric-name">净利润(亿)</td><td>1.98</td><td>2.29</td><td>1.62</td><td>1.30</td><td>0.82</td><td>0.65</td><td>0.95</td></tr>
<tr><td class="metric-name">净利润增速</td><td>21.28%</td><td>40.84%</td><td>24.56%</td><td>59.83%</td><td>25.24%</td><td>-31.46%</td><td>-</td></tr>
<tr><td class="metric-name">经营净现金流(亿)</td><td>3.53</td><td>4.82</td><td>2.63</td><td>1.97</td><td>1.54</td><td>1.36</td><td>1.32</td></tr>
<tr><td class="metric-name">资本开支(亿)</td><td>0.98</td><td>1.43</td><td>0.75</td><td>0.79</td><td>0.59</td><td>0.69</td><td>0.48</td></tr>
<tr><td class="metric-name">自由现金流(亿)</td><td>2.55</td><td>3.39</td><td>1.88</td><td>1.18</td><td>0.95</td><td>0.66</td><td>0.83</td></tr>
<tr><td class="metric-name">分红(亿)</td><td>-</td><td>1.26</td><td>0.81</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">回购(亿)</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">总资产(亿)</td><td>36.81</td><td>35.48</td><td>34.36</td><td>22.55</td><td>21.72</td><td>12.78</td><td>10.06</td></tr>
<tr><td class="metric-name">净资产(亿)</td><td>28.58</td><td>27.78</td><td>30.14</td><td>18.51</td><td>17.19</td><td>6.82</td><td>5.26</td></tr>
<tr><td class="metric-name">商誉(亿)</td><td>0.24</td><td>0.24</td><td>0.24</td><td>0.24</td><td>0.26</td><td>-</td><td>-</td></tr>
<tr class="section-row"><td class="section-label">费用指标</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">销售费用率</td><td>1.87%</td><td>2.37%</td><td>2.35%</td><td>2.27%</td><td>1.59%</td><td>1.99%</td><td>1.64%</td></tr>
<tr><td class="metric-name">管理费用率</td><td>10.35%</td><td>11.79%</td><td>14.27%</td><td>15.29%</td><td>14.18%</td><td>16.69%</td><td>14.27%</td></tr>
<tr><td class="metric-name">SG&A比例</td><td>12.22%</td><td>14.15%</td><td>16.63%</td><td>17.55%</td><td>15.77%</td><td>18.67%</td><td>15.91%</td></tr>
<tr><td class="metric-name">研发费用率</td><td>7.91%</td><td>10.62%</td><td>10.12%</td><td>9.56%</td><td>7.75%</td><td>7.66%</td><td>6.07%</td></tr>
<tr><td class="metric-name">其他费用率</td><td>4.62%</td><td>-0.70%</td><td>-6.04%</td><td>-3.94%</td><td>-2.44%</td><td>-1.28%</td><td>-1.88%</td></tr>
<tr><td class="metric-name">折旧费用占比</td><td>-</td><td>15.47%</td><td>16.90%</td><td>21.16%</td><td>23.19%</td><td>26.46%</td><td>20.07%</td></tr>
<tr><td class="metric-name">所得税率</td><td>14.78%</td><td>9.54%</td><td>10.90%</td><td>7.44%</td><td>13.99%</td><td>14.35%</td><td>14.49%</td></tr>
<tr class="section-row"><td class="section-label">资产占比</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">现金占比</td><td>26.03%</td><td>29.72%</td><td>25.14%</td><td>12.70%</td><td>20.97%</td><td>14.62%</td><td>22.31%</td></tr>
<tr><td class="metric-name">库存占比</td><td>1.52%</td><td>1.46%</td><td>1.57%</td><td>3.51%</td><td>3.43%</td><td>7.21%</td><td>6.39%</td></tr>
<tr><td class="metric-name">应收款占比</td><td>3.34%</td><td>2.74%</td><td>1.04%</td><td>2.56%</td><td>3.46%</td><td>4.14%</td><td>4.45%</td></tr>
<tr><td class="metric-name">预付款占比</td><td>0.29%</td><td>0.19%</td><td>0.14%</td><td>0.94%</td><td>0.47%</td><td>0.49%</td><td>0.35%</td></tr>
<tr><td class="metric-name">固定资产占比</td><td>-</td><td>30.55%</td><td>24.03%</td><td>38.67%</td><td>42.10%</td><td>57.06%</td><td>56.15%</td></tr>
<tr><td class="metric-name">长期投资占比</td><td>0.91%</td><td>0.94%</td><td>0.96%</td><td>1.49%</td><td>1.66%</td><td>3.27%</td><td>-</td></tr>
<tr><td class="metric-name">商誉占比</td><td>0.64%</td><td>0.67%</td><td>0.69%</td><td>1.08%</td><td>1.18%</td><td>-</td><td>-</td></tr>
<tr class="other-assets-row"><td class="metric-name">其他资产占比</td><td>67.27%</td><td>33.74%</td><td>46.43%</td><td>39.05%</td><td>26.73%</td><td>13.21%</td><td>10.36%</td></tr>
<tr><td class="metric-name">应付款占比</td><td>2.00%</td><td>3.51%</td><td>1.12%</td><td>1.97%</td><td>1.82%</td><td>2.90%</td><td>7.02%</td></tr>
<tr><td class="metric-name">预收款占比</td><td>7.97%</td><td>7.96%</td><td>5.54%</td><td>7.20%</td><td>7.46%</td><td>13.49%</td><td>12.66%</td></tr>
<tr><td class="metric-name">短期借款占比</td><td>0.13%</td><td>0.21%</td><td>0.22%</td><td>0.31%</td><td>0.31%</td><td>0.30%</td><td>0.38%</td></tr>
<tr><td class="metric-name">长期借款占比</td><td>0.91%</td><td>0.00%</td><td>0.00%</td><td>0.00%</td><td>0.00%</td><td>0.00%</td><td>0.00%</td></tr>
<tr><td class="metric-name">运营资产占比</td><td>-4.82%</td><td>-7.08%</td><td>-3.91%</td><td>-2.17%</td><td>-1.92%</td><td>-4.55%</td><td>-8.49%</td></tr>
<tr><td class="metric-name">有息负债率</td><td>1.05%</td><td>0.21%</td><td>0.22%</td><td>0.31%</td><td>0.31%</td><td>0.30%</td><td>0.38%</td></tr>
<tr class="section-row"><td class="section-label">周转能力</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">存货周转天数</td><td>69</td><td>50</td><td>62</td><td>107</td><td>100</td><td>174</td><td>104</td></tr>
<tr><td class="metric-name">应收款周转天数</td><td>68</td><td>44</td><td>21</td><td>40</td><td>61</td><td>55</td><td>40</td></tr>
<tr><td class="metric-name">应付款周转天数</td><td>92</td><td>120</td><td>44</td><td>60</td><td>53</td><td>70</td><td>114</td></tr>
<tr><td class="metric-name">固定资产周转率</td><td>-</td><td>0.74</td><td>0.73</td><td>0.60</td><td>0.49</td><td>0.47</td><td>0.71</td></tr>
<tr><td class="metric-name">总资产周转率</td><td>0.18</td><td>0.23</td><td>0.18</td><td>0.23</td><td>0.21</td><td>0.27</td><td>0.40</td></tr>
<tr class="section-row"><td class="section-label">人均效率</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">员工人数</td><td>-</td><td>700</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">人均创收(万)</td><td>-</td><td>114.05</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">人均创利(万)</td><td>-</td><td>32.67</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">人均薪酬(万)</td><td>-</td><td>31.98</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr class="section-row"><td class="section-label">市场表现</td><td class="section-spacer" colspan="7"></td></tr>
<tr><td class="metric-name">股价</td><td>19.36</td><td>16.33</td><td>17.33</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">市值(亿)</td><td>61.29</td><td>51.70</td><td>54.86</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">PE</td><td>26.80</td><td>31.84</td><td>42.09</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">PB</td><td>2.14</td><td>1.88</td><td>1.84</td><td>-</td><td>-</td><td>-</td><td>-</td></tr>
<tr><td class="metric-name">股东户数</td><td>11,192</td><td>12,364</td><td>15,965</td><td>7</td><td>-</td><td>-</td><td>-</td></tr>
</tbody>
</table>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
const scrollableTables = document.querySelectorAll('table[data-scrollable="true"]');
scrollableTables.forEach(table => {
const container = document.createElement('div');
container.className = 'table-container';
table.parentNode.insertBefore(container, table);
container.appendChild(table);
});
const parseValue = (text) => {
if (!text || text.trim() === '-') return null;
return parseFloat(text.replace(/%|,/g, ''));
};
const highlightIfOverThirtyPercent = (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value > 30) {
cell.classList.add('bg-red', 'font-red');
}
};
const styleRules = {
'ROE': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value > 15) cell.classList.add('bg-green');
},
'ROA': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value > 10) cell.classList.add('bg-green');
},
'毛利率': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value > 50) cell.classList.add('bg-green');
},
'净利润率': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null) {
if (value > 20) {
cell.classList.add('bg-green');
} else if (value < 0) {
cell.classList.add('bg-red', 'font-red');
}
}
},
'收入增速': (cell) => {
cell.classList.add('italic');
const value = parseValue(cell.textContent);
if (value !== null) {
if (value > 15) {
cell.classList.add('bg-green', 'font-green');
} else if (value < 0) {
cell.classList.add('bg-red', 'font-red');
} else {
cell.classList.add('font-blue');
}
}
},
'净利润增速': (cell) => {
cell.classList.add('italic');
const value = parseValue(cell.textContent);
if (value !== null) {
if (value > 15) {
cell.classList.add('bg-green', 'font-green');
} else if (value < 0) {
cell.classList.add('bg-red', 'font-red');
} else {
cell.classList.add('font-blue');
}
}
},
'经营净现金流(亿)': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value < 0) cell.classList.add('bg-red', 'font-red');
},
'应收款周转天数': (cell) => {
const value = parseValue(cell.textContent);
if (value !== null && value > 90) {
cell.classList.add('bg-red', 'font-red');
}
},
'现金占比': highlightIfOverThirtyPercent,
'库存占比': highlightIfOverThirtyPercent,
'应收款占比': highlightIfOverThirtyPercent,
'预付款占比': highlightIfOverThirtyPercent,
'固定资产占比': highlightIfOverThirtyPercent,
'长期投资占比': highlightIfOverThirtyPercent,
'商誉占比': highlightIfOverThirtyPercent,
'其他资产占比': highlightIfOverThirtyPercent
};
const metricsTables = document.querySelectorAll('table[data-table="metrics"]');
metricsTables.forEach(table => {
let netProfitValues = [];
let fcfRow = null;
const rows = table.querySelectorAll('tbody tr');
rows.forEach(row => {
if (row.classList.contains('section-row')) return;
const metricCell = row.querySelector('td:first-child');
if (!metricCell) return;
const metricName = metricCell.textContent.trim();
if (metricName === '净利润(亿)') {
row.querySelectorAll('td:not(:first-child)').forEach(cell => {
netProfitValues.push(parseValue(cell.textContent));
});
} else if (metricName === '自由现金流(亿)') {
fcfRow = row;
}
});
rows.forEach(row => {
if (row.classList.contains('section-row')) return;
const metricCell = row.querySelector('td:first-child');
if (!metricCell) return;
const metricName = metricCell.textContent.trim();
const cells = row.querySelectorAll('td:not(:first-child)');
if (styleRules[metricName]) {
cells.forEach(cell => {
styleRules[metricName](cell);
});
}
if (row === fcfRow && netProfitValues.length > 0) {
cells.forEach((cell, index) => {
const fcfValue = parseValue(cell.textContent);
const netProfitValue = netProfitValues[index];
if (fcfValue !== null) {
if (fcfValue < 0) {
cell.classList.add('bg-red', 'font-red');
} else if (netProfitValue !== null && fcfValue > netProfitValue) {
cell.classList.add('bg-green', 'font-green');
}
}
});
}
});
});
});
</script>
</body>
</html>