.hxeco-wrap,
.hxeco-wrap * {
box-sizing: border-box;
}
.hxeco-wrap {
width: 100%;
background: #f5f7fb;
font-family: system-ui, -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Noto Sans SC", sans-serif;
color: #1e293b;
line-height: 1.5;
padding: 16px;
}
.hxeco-container {
max-width: 480px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 13px;
}
.hxeco-stats-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 11px;
}
.hxeco-stat-item {
background: #ffffff;
border-radius: 14px;
padding: 13px;
box-shadow: 0 2px 6px rgba(0,0,0,0.03);
border: 1px solid #eef2f6;
}
.hxeco-stat-label {
font-size: 12px;
color: #64748b;
margin-bottom: 5px;
}
.hxeco-stat-number {
font-size: 22px;
font-weight: 700;
color: #0f172a;
line-height: 1.2;
}
.hxeco-stat-desc {
font-size: 11px;
color: #64748b;
margin-top: 3px;
}
.hxeco-accordion {
background: #ffffff;
border-radius: 14px;
border: 1px solid #eef2f6;
overflow: hidden;
box-shadow: 0 2px 6px rgba(0,0,0,0.02);
}
.hxeco-accordion-header {
width: 100%;
padding: 13px 16px;
font-weight: 600;
font-size: 15px;
display: flex;
justify-content: space-between;
align-items: center;
cursor: pointer;
background: #ffffff;
transition: background 0.2s;
border: none;
color: #1e293b;
text-align: left;
}
.hxeco-accordion-header:hover {
background: #f8fafc;
}
.hxeco-arrow {
font-size: 12px;
color: #64748b;
transition: transform 0.2s;
margin-left: 10px;
}
.hxeco-accordion-content {
padding: 0 16px;
max-height: 0;
overflow: hidden;
transition: max-height 0.3s ease, padding 0.3s ease;
}
.hxeco-accordion.hxeco-open .hxeco-accordion-content {
padding: 13px 16px;
max-height: 2200px;
}
.hxeco-accordion.hxeco-open .hxeco-arrow {
transform: rotate(180deg);
}
.hxeco-mini-table {
width: 100%;
border-collapse: collapse;
font-size: 13px;
}
.hxeco-mini-table th {
background: #f8fafc;
font-weight: 600;
padding: 8px 6px;
border-bottom: 1px solid #e2e8f0;
text-align: left;
white-space: nowrap;
}
.hxeco-mini-table td {
padding: 8px 6px;
border-bottom: 1px solid #f1f5f9;
vertical-align: top;
}
.hxeco-step-row {
display: flex;
align-items: center;
gap: 6px;
padding: 6px 0;
font-size: 13px;
}
.hxeco-step-dot {
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
font-weight: 700;
flex-shrink: 0;
}
.hxeco-step-done {
background: #dcfce7;
color: #166534;
}
.hxeco-step-current {
background: #fef3c7;
color: #92400e;
}
.hxeco-step-pending {
background: #f1f5f9;
color: #64748b;
}
.hxeco-legal-box {
background: #fefce8;
border-left: 3px solid #eab308;
padding: 11px 13px;
border-radius: 8px;
font-size: 12px;
color: #5c4b0b;
margin-top: 8px;
}
.hxeco-risk-box {
background: #ffffff;
border-left-color: #f97316;
margin-top: 0;
}
.hxeco-btn-row {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 8px;
}
.hxeco-btn {
flex: 1 1 auto;
padding: 8px 13px;
border-radius: 24px;
font-size: 13px;
font-weight: 600;
text-align: center;
text-decoration: none;
border: 1px solid #cbd5e1;
color: #1e293b;
background: #ffffff;
white-space: nowrap;
transition: all 0.2s;
}
.hxeco-btn:hover {
transform: translateY(-1px);
box-shadow: 0 6px 14px rgba(15, 23, 42, 0.08);
color: #0f766e;
}
.hxeco-btn-primary {
background: #0f766e;
color: #ffffff;
border: none;
}
.hxeco-btn-primary:hover {
color: #ffffff;
background: #115e59;
}
.hxeco-footer {
text-align: center;
font-size: 11px;
color: #94a3b8;
margin-top: 8px;
}
.hxeco-loading {
text-align: center;
color: #64748b;
font-size: 13px;
padding: 10px 0;
}
.hxeco-error {
display: block;
color: #dc2626;
font-size: 13px;
padding: 10px 0;
}
.hxeco-empty {
text-align: center;
color: #64748b;
padding: 16px 0;
font-size: 13px;
}
.hxeco-search-box {
display: flex;
gap: 8px;
margin-bottom: 8px;
}
.hxeco-search-input {
flex: 1;
min-width: 0;
padding: 8px;
border: 1px solid #e2e8f0;
border-radius: 8px;
font-size: 13px;
outline: none;
}
.hxeco-search-input:focus {
border-color: #0f766e;
box-shadow: 0 0 0 3px rgba(15, 118, 110, 0.12);
}
.hxeco-search-btn {
padding: 8px 16px;
background: #0f766e;
color: #ffffff;
border: none;
border-radius: 8px;
font-size: 13px;
cursor: pointer;
white-space: nowrap;
}
.hxeco-table-scroll {
width: 100%;
overflow-x: auto;
}
.hxeco-small-text {
font-size: 12px;
color: #475569;
margin-top: 10px;
}
.hxeco-progress-text {
font-size: 13px;
line-height: 1.8;
}
@media (max-width: 420px) {
.hxeco-wrap {
padding: 12px;
}
.hxeco-stats-grid {
gap: 9px;
}
.hxeco-stat-item {
padding: 11px;
}
.hxeco-stat-number {
font-size: 19px;
}
.hxeco-accordion-header {
font-size: 14px;
padding: 12px 13px;
}
.hxeco-accordion.hxeco-open .hxeco-accordion-content {
padding: 12px 13px;
}
.hxeco-mini-table {
font-size: 12px;
}
.hxeco-search-box {
flex-direction: column;
}
.hxeco-search-btn {
width: 100%;
}
}
✓
概念验证 — 核心逻辑可行
✓
用户系统搭建 — 奠基者编号开始发放
⏳
原型开发 — 基础功能实现中
○
内测准备 — 邀请共建者参与体验
🎯 核心目标:帮你管物、管事、管提醒,让生活更有序。
每周更新。当前阶段用成熟技术快速推进,不依赖底层系统。详见《共建计划·公开版》1.3.2。
依据《共建计划·公开版》1.4.1 第一阶段资金用途,每月公示。
🔒 本表依据《共建计划·公开版》2.7.2节公开。仅展示“奠基者编号”与“贡献值区间”,不涉及真实姓名。个人凭“奠基者编号+身份证后4位”可查询本人完整记录。如有异议请联系运营组核查。
上表为项目发展的愿景规划。当前仅开放第一阶段小额支持,后续轮次将根据实际进展动态调整。
⚠️ 重要法律声明与风险提示:本项目为个人发起的冷启动阶段构想。当前阶段所有资金支持属于个人之间自愿互助,共建者不获得股权、债权或固定收益。所有关于“分红”“保障”“权益”的描述均为项目成功并成立公司后的愿景规划,不构成任何回报承诺。项目存在完全失败的可能,支持资金可能无法收回。请量力而行,理性参与。详见《和谐共生数字生态系统·共建计划-公开版26-04-07》全文。
(function() {
const CSV_URL = 'YOUR_CSV_URL';
let allData = [];
const root = document.currentScript.previousElementSibling;
const totalMembersEl = root.querySelector('[data-hxeco-total-members]');
const starTableEl = root.querySelector('[data-hxeco-star-table]');
const fullTableEl = root.querySelector('[data-hxeco-full-table]');
const searchInputEl = root.querySelector('[data-hxeco-search-input]');
const searchBtnEl = root.querySelector('[data-hxeco-search-btn]');
function escapeHtml(value) {
return String(value || '')
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''');
}
function parseCSV(text) {
const rows = [];
let row = [];
let value = '';
let insideQuotes = false;
for (let i = 0; i cell !== '')) rows.push(row);
row = [];
value = '';
} else {
value += char;
}
}
if (value || row.length) {
row.push(value.trim());
if (row.some(cell => cell !== '')) rows.push(row);
}
if (rows.length item.trim());
return rows.slice(1).map(items => {
const obj = {};
headers.forEach((header, index) => {
obj[header] = items[index] || '';
});
return obj;
}).filter(item => Object.values(item).some(v => String(v).trim() !== ''));
}
function renderStarTable(data) {
if (!data.length) {
starTableEl.innerHTML = '
暂无共建者数据
';
return;
}
const top5 = data.slice(0, 5);
let html = '
';
html += '
💡 完整记录见下方明细表。个人凭“编号+身份证后4位”查询本人数据。
';
starTableEl.innerHTML = html;
}
function renderFullTable(data, keyword) {
let filteredData = data;
const text = String(keyword || '').trim().toLowerCase();
if (text) {
filteredData = data.filter(row => {
return String(row['奠基者编号'] || '').toLowerCase().includes(text) ||
String(row['档位'] || '').toLowerCase().includes(text) ||
String(row['贡献类型'] || '').toLowerCase().includes(text) ||
String(row['贡献值区间'] || '').toLowerCase().includes(text) ||
String(row['参与阶段'] || '').toLowerCase().includes(text) ||
String(row['加入时间'] || '').toLowerCase().includes(text);
});
}
if (!filteredData.length) {
fullTableEl.innerHTML = '
没有匹配的记录
';
return;
}
let html = '
| 编号 | 贡献值区间 | 档位 | 参与阶段 | 加入时间 | 贡献类型 |
';
filteredData.forEach(row => {
html += '';
html += '| #' + escapeHtml(row['奠基者编号']) + ' | ';
html += '' + escapeHtml(row['贡献值区间']) + ' | ';
html += '' + escapeHtml(row['档位']) + ' | ';
html += '' + escapeHtml(row['参与阶段']) + ' | ';
html += '' + escapeHtml(row['加入时间']) + ' | ';
html += '' + escapeHtml(row['贡献类型']) + ' | ';
html += '
';
});
html += '
';
html += '
共 ' + filteredData.length + ' 条记录
';
fullTableEl.innerHTML = html;
}
function updateTotalMembers(count) {
totalMembersEl.textContent = count;
}
function showCsvNotice() {
starTableEl.innerHTML = '
请先替换 CSV_URL 为你的 Google Sheets CSV 链接';
fullTableEl.innerHTML = '
请先替换 CSV_URL 为你的 Google Sheets CSV 链接';
totalMembersEl.textContent = '--';
}
async function loadData() {
if (!CSV_URL || CSV_URL === 'YOUR_CSV_URL') {
showCsvNotice();
return;
}
try {
const response = await fetch(CSV_URL + (CSV_URL.includes('?') ? '&' : '?') + '_=' + Date.now(), {
cache: 'no-store'
});
if (!response.ok) {
throw new Error('网络错误');
}
const csvText = await response.text();
allData = parseCSV(csvText);
renderStarTable(allData);
renderFullTable(allData, searchInputEl.value);
updateTotalMembers(allData.length);
} catch (err) {
starTableEl.innerHTML = '
加载失败,请检查 CSV 链接是否公开';
fullTableEl.innerHTML = '
加载失败,请检查 CSV 链接是否公开';
totalMembersEl.textContent = '--';
}
}
root.querySelectorAll('.hxeco-accordion-header').forEach(button => {
button.addEventListener('click', function() {
this.closest('.hxeco-accordion').classList.toggle('hxeco-open');
});
});
searchBtnEl.addEventListener('click', function() {
renderFullTable(allData, searchInputEl.value);
});
searchInputEl.addEventListener('keydown', function(e) {
if (e.key === 'Enter') {
renderFullTable(allData, searchInputEl.value);
}
});
loadData();
setInterval(loadData, 5 * 60 * 1000);
})();