生娃计算器加到 15 题:唐筛/无创、满月百天、宝宝用品、保险(v26110406)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
deploy
2026-11-04 04:50:48 +00:00
parent 30dde21b09
commit 46f4ba1beb
23 changed files with 118 additions and 94 deletions

View File

@@ -20,6 +20,10 @@
喂养方式(母乳为主/混合/奶粉 → 0~1 岁奶粉量、1~3 岁奶粉、吸奶器/催乳/哺乳内衣);医院、月子跟路线默认,分娩、喂养默认「还不确定」「混合」;
· 现在的题序:算哪一段 → 城市 → 头胎二胎 → 医院 → 顺产剖宫产 → 月子 → 喂养 → 0~3 岁谁带 → 上学路线 → 课外班 → 家庭月收入(按所选阶段出现);
· 「写在账单后面 / 给妈妈的话」整块删掉(换一句、复制发给妈妈、生成卡片、drawCard 都删了),只留一行浅色小提示;卡片弹层只给「保存账单图片」用。
⑧ v8(2026-11-04,用户:题太少,加到 12 道以上、不超过 15 道):
· 新增 4 题,档次跟答案走(G() 项,不再跟路线):唐筛还是无创 DNA(screen → 筛查项)、满月百天要不要办(party → 孕妇照、报喜喜糖、新生儿摄影、满月酒、百天照、百天宴)、
宝宝用品怎么置办(gear → 待产包、推车、婴儿床、安全座椅、衣服玩具等 17 项)、给娃买哪些保险(ins → 各阶段医保和商业险);默认都按路线档次,旧账单数字不变;
· 全选阶段时题序:算哪一段 → 城市 → 头胎二胎 → 医院 → 唐筛/无创 → 顺产剖宫产 → 月子 → 满月百天 → 喂养 → 宝宝用品 → 谁带 → 上学 → 课外班 → 保险 → 月收入,共 15 题;v7 备份 /tmp/huafei-before-v8.html。
存储 localStorage「mmbox.huafei.v5」(兼容读取 v4)。推荐工具走 ../_shared/tools.js;自成一页:不引 app.js;
返回走 history.back 或相对路径 ../../ 并带回 search + hash。v4 备份 /tmp/huafei5/huafei-v4-before-v5.html。 -->
<style>
@@ -292,6 +296,12 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
<symbol id="o-mix" viewBox="0 0 24 24"><path d="M7 3.5c2.3 2.8 4 5 4 7.2a4 4 0 0 1-8 0c0-2.2 1.7-4.4 4-7.2z"/><path d="M15 8h4M15.5 8v3l-1 1.5V20h5.5v-7.5l-1-1.5V8"/></symbol>
<symbol id="o-bottle" viewBox="0 0 24 24"><path d="M10 2.5h4M10.5 2.5v2.5L9 6.5h6l-1.5-1.5V2.5"/><path d="M8 9l1-2.5h6L16 9v10.5a2 2 0 0 1-2 2h-4a2 2 0 0 1-2-2z"/><path d="M8 12.5h3M8 15.5h3M8 18.5h3"/></symbol>
<symbol id="o-bldg" viewBox="0 0 24 24"><path d="M3 21h18M5 21V9l5-3v15M10 21V3l9 4v14M13.5 9h2M13.5 12.5h2M13.5 16h2M7 12h1M7 15.5h1"/></symbol>
<symbol id="o-dna" viewBox="0 0 24 24"><path d="M8 3c0 6 8 6 8 9s-8 3-8 9M16 3c0 6-8 6-8 9s8 3 8 9M9.5 6.5h5M9.5 17.5h5"/></symbol>
<symbol id="o-cake" viewBox="0 0 24 24"><path d="M4 21h16M5 21v-7h14v7M5 17.5c2.3 1 4.7 1 7 0s4.7-1 7 0M8 14v-3M12 14v-3M16 14v-3M8 7.5v.01M12 7.5v.01M16 7.5v.01"/></symbol>
<symbol id="o-camera" viewBox="0 0 24 24"><path d="M4 8h3l2-3h6l2 3h3v11H4zM12 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z"/></symbol>
<symbol id="o-recycle" viewBox="0 0 24 24"><path d="M7 19H4.5l2.6-4.5M7.1 14.5 5.5 17M10 5.5l2-3.5 2.6 4.5M14.6 6.5 12 6M19.5 14.5 17 19h-5M12 19l2 2M5.5 11 4 8.5M18 9.5l1.5 2.5"/></symbol>
<symbol id="o-cart" viewBox="0 0 24 24"><path d="M3 4h2.5l2 11h10.5l2-8H6.3M9 20h.01M17 20h.01"/></symbol>
<symbol id="o-umb" viewBox="0 0 24 24"><path d="M3 12a9 9 0 0 1 18 0zM12 12v6.5a2 2 0 0 0 4 0M12 3v-.5"/></symbol>
<symbol id="o-bldg2" viewBox="0 0 24 24"><path d="M3 21h18M5 21V10h6v11M11 21V6h8v15M14 9.5h2M14 13h2M14 16.5h2M7.5 13.5h1M7.5 17h1"/></symbol>
<symbol id="o-house" viewBox="0 0 24 24"><path d="M3.5 11L12 4l8.5 7M6 9.5V20h12V9.5"/><path d="M10 20v-5h4v5"/></symbol>
<symbol id="o-tree" viewBox="0 0 24 24"><path d="M2.5 13L8 8.5l5.5 4.5M4.5 11.5V20h7v-8.5"/><path d="M17.5 20v-5M17.5 4.5c-2.2 0-3.5 2.5-3.5 5 0 2.8 1.6 4.5 3.5 4.5s3.5-1.7 3.5-4.5c0-2.5-1.3-5-3.5-5zM2 20h20"/></symbol>
@@ -391,11 +401,11 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
/* ================= 路线 ================= */
var ROUTES = [
{ id: 'low', badge: 'b-low', who: '我是普通人', how: '量力养', line: '能省则省,爱一点不少',
tags: ['公立医院', '家人坐月子', '老人帮带', '能省则省'], def: { hosp: 0, yuezi: 0, care: 0, school: 0, extra: 0 } },
tags: ['公立医院', '家人坐月子', '老人帮带', '能省则省'], def: { hosp: 0, yuezi: 0, care: 0, school: 0, extra: 0, screen: 0, gear: 0, party: 0, ins: 0 } },
{ id: 'mid', badge: 'b-mid', who: '我是中产家', how: '从容养', line: '不卷也不亏待,日子过得舒展',
tags: ['公立特需', '月嫂', '托班', '适度早教'], def: { hosp: 1, yuezi: 1, care: 1, school: 0, extra: 1 } },
tags: ['公立特需', '月嫂', '托班', '适度早教'], def: { hosp: 1, yuezi: 1, care: 1, school: 0, extra: 1, screen: 1, gear: 1, party: 1, ins: 1 } },
{ id: 'rich', badge: 'b-rich', who: '我是大富豪', how: '富养娃', line: '钱能解决的,都不让娃将就',
tags: ['私立高端产检', '月子中心', '育儿嫂', '国际学校'], def: { hosp: 2, yuezi: 2, care: 2, school: 2, extra: 2 } }
tags: ['私立高端产检', '月子中心', '育儿嫂', '国际学校'], def: { hosp: 2, yuezi: 2, care: 2, school: 2, extra: 2, screen: 2, gear: 2, party: 2, ins: 2 } }
];
function tierOf(r) { return r; } /* 11-02 用户:路线顺序改成 普通人 → 中产 → 大富豪,下标即档次 */ // 档次 T:0 量力 / 1 从容 / 2 富养
@@ -426,14 +436,23 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
{ k: 'hosp', h: '打算在哪类医院产检、生娃?', s: '产检和分娩的费用,主要看医院', if: function (st) { return has(st, [0, 1]); }, o: [
['公立医院普通门诊', '建档产检、普通病房,医保能报', 'hosp'], ['公立医院特需', '特需门诊、单间病房,自费多一些', 'star'],
['私立妇产医院', '产检分娩套餐、VIP 病房', 'gem']] },
{ k: 'screen', h: '唐筛还是无创 DNA?', s: '查胎儿染色体的那一项,价格差好几倍', if: function (st) { return has(st, [0]); }, o: [
['唐氏筛查', '常规抽血筛查,几百元', 'heart'], ['无创 DNA(NIPT)', '准确率更高,一两千元', 'dna'],
['无创 DNA 加强版', '多查几种染色体异常', 'gem']] },
{ k: 'birth', h: '预计顺产还是剖宫产?', s: '剖宫产手术费更高、要多住几天', d: 2, if: function (st) { return has(st, [1]); }, o: [
['顺产', '一般住院 2~3 天,可选无痛', 'heart'], ['剖宫产', '一般住院 4~6 天,手术和麻醉另算', 'med'],
['还不确定', '按顺产估,再留一点剖宫产的差价', 'ask']] },
{ k: 'yuezi', h: '月子打算怎么坐?', s: '坐月子是生娃前后最大的一笔', if: function (st) { return has(st, [2]); }, o: [
['家里人照顾', '家人做月子餐、帮带宝宝', 'family'], ['请月嫂到家', '26 天住家月嫂', 'nurse'],
['住月子中心', '28 天,吃住护理都包', 'bldg2']] },
{ k: 'party', h: '满月、百天这些要办吗?', s: '孕妇照、满月酒、百天照,仪式感也是一笔', if: function (st) { return has(st, [0, 1, 2, 3]); }, o: [
['简单过', '自己拍拍照,家里吃顿饭', 'heart'], ['请亲友聚一聚', '拍套写真,摆几桌', 'cake'],
['办得隆重', '棚拍写真,满月、百天都办宴', 'camera']] },
{ k: 'feed', h: '宝宝打算怎么喂?', s: '第一年奶粉花多少,差别就在这', d: 1, if: function (st) { return has(st, [2, 3]); }, o: [
['母乳为主', '偶尔补一点奶粉', 'drop'], ['混合喂养', '母乳加奶粉', 'mix'], ['奶粉喂养', '主要喝奶粉', 'bottle']] },
{ k: 'gear', h: '宝宝用品怎么置办?', s: '待产包、推车、婴儿床、衣服玩具,档次差得多', if: function (st) { return has(st, [0, 1, 3, 4]); }, o: [
['能省则省', '亲戚送的、二手的接着用', 'recycle'], ['实用为主', '国产好牌子,够用就好', 'cart'],
['一步到位', '大牌、颜值高的直接买', 'gem']] },
{ k: 'care', h: '0~3 岁,白天谁带娃?', s: '产假结束后的安排,差别很大', if: function (st) { return has(st, [3, 4, 5]); }, o: [
['老人或自己带', '给老人一点补贴,3 岁上幼儿园', 'family'], ['家里带,2 岁上托班', '第 3 年交托班费', 'flag'],
['请育儿嫂', '住家或白班阿姨,带到上幼儿园', 'nurse'], ['1 岁半上托育园', '全日托,按月费算', 'school']] },
@@ -441,6 +460,9 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
['公立为主', '普惠园 + 就近公立学校', 'book'], ['民办私立', '民办园 + 民办中小学', 'cap'], ['国际学校', '双语园 + 国际学校', 'globe']] },
{ k: 'extra', h: '早教和课外班呢?', s: '早教、兴趣班、补习,一路算下去', if: function (st) { return has(st, [3, 4, 5, 6, 7, 8]); }, o: [
['顺其自然', '以玩为主,偶尔报一门', 'sprout'], ['适度报几门', '一两门兴趣 + 必要补习', 'music'], ['拼一把', '早教、兴趣、补习一个不落', 'rocket']] },
{ k: 'ins', h: '给娃买哪些保险?', s: '从出生一直交到 18 岁,差别不小', if: function (st) { return has(st, [3, 4, 5, 6, 7, 8]); }, o: [
['只上少儿医保', '每年几百元,看病能报', 'shield2'], ['医保加商业医疗险', '再补一份百万医疗、意外险', 'umb'],
['高端医疗加重疾险', '私立医院能直付,重疾也保上', 'gem']] },
{ k: 'inc', type: 'income', h: '你家每月收入大概多少?', s: '填了能看看这张账单相当于你家几年的收入' }
];
var QK = {}; QS.forEach(function (q) { QK[q.k] = q; });
@@ -453,6 +475,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
城市系数:s 人工/服务/教育,g 吃穿用,m 医疗,0 不随城市变。 */
var CF = { s: [1.45, 1, 0.72, 0.55], g: [1.1, 1, 0.9, 0.82], m: [1.25, 1, 0.8, 0.65], '0': [1, 1, 1, 1] };
function I(n, a, b, c, k, r) { return { n: n, v: [a, b, c], k: k, r: r }; }
function G(g, n, a, b, c, k, r) { return { n: n, v: [a, b, c], k: k, r: r, gk: g }; } // 同 I,但档次跟某道题走(screen/gear/party/ins),不跟路线
function D(g, n, vs, k) { return { g: g, n: n, dv: vs, k: k }; }
function F(n, fv, k, r) { return { n: typeof n === 'function' ? n : function () { return n; }, fv: fv, k: k, r: r }; }
function sc3(v, f) { return [v[0] * f, v[1] * f]; }
@@ -474,7 +497,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
[
D('hosp', ['建档和常规产检(约 12 次)', '特需门诊产检(约 12 次)', '私立医院产检套餐'], [[1500, 3000], [5000, 10000], [15000, 30000]], 'm'),
D('hosp', 'B 超(NT、大排畸、晚孕)', [[800, 1500], [1500, 3000], [2000, 4000]], 'm'),
I(['唐氏筛查', '无创 DNA(NIPT)', '无创 DNA 加强版'], [200, 400], [1500, 2500], [2500, 4000], 'm'),
G('screen', ['唐氏筛查', '无创 DNA(NIPT)', '无创 DNA 加强版'], [200, 400], [1500, 2500], [2500, 4000], 'm'),
D('hosp', '四维彩超', [[300, 600], [500, 1000], [800, 2000]], 'm'),
D('hosp', '糖耐量和血液检查', [[300, 600], [500, 1000], [800, 1500]], 'm'),
D('hosp', '胎心监护', [[200, 500], [400, 800], [800, 1500]], 'm'),
@@ -486,8 +509,8 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('孕妇枕、孕妇鞋', [150, 400], [300, 800], [800, 2000], 'g'),
I(['孕妇学校(免费为主)', '孕期瑜伽和课程', '孕期私教和产前课程'], [0, 200], [1000, 3000], [5000, 12000], 's'),
I('产检交通和打车', [500, 1500], [1500, 3000], [3000, 6000], 's'),
I(['孕妇照(自己拍为主)', '孕妇写真', '孕妇写真(棚拍)'], [0, 300], [1000, 3000], [3000, 8000], 's'),
I('待产包', [500, 1200], [1200, 2500], [2500, 5000], 'g', 0.6)
G('party', ['孕妇照(自己拍为主)', '孕妇写真', '孕妇写真(棚拍)'], [0, 300], [1000, 3000], [3000, 8000], 's'),
G('gear', '待产包', [500, 1200], [1200, 2500], [2500, 5000], 'g', 0.6)
],
// ② 分娩住院
[
@@ -499,11 +522,11 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
function (s) { return sc3([[300, 800], [2000, 5000], [5000, 15000]][s.hosp], [1, 1.6, 1.2][s.birth]); }, 'm'),
I('陪护床和护工', [300, 800], [1000, 2500], [2000, 5000], 's'),
D('hosp', '新生儿筛查(听力、足跟血)', [[300, 800], [500, 1200], [1500, 3000]], 'm'),
I('新生儿尿片、衣服、包被', [200, 500], [400, 800], [800, 1500], 'g'),
G('gear', '新生儿尿片、衣服、包被', [200, 500], [400, 800], [800, 1500], 'g'),
I('产妇用品(产褥垫、收腹带)', [200, 500], [400, 800], [800, 1500], 'g'),
F(function (s) { return ['住院餐', '住院营养餐', '院内营养月子餐'][s.hosp]; }, function (s) { return sc3([[300, 800], [800, 1500], [2000, 4000]][s.hosp], [1, 1.6, 1.2][s.birth]); }, 's'),
I('脐带血存储', [0, 0], [0, 0], [15000, 25000], '0'),
I('报喜红包和喜糖', [500, 1500], [1000, 3000], [3000, 8000], 'g'),
G('party', '报喜红包和喜糖', [500, 1500], [1000, 3000], [3000, 8000], 'g'),
I('家属交通和餐费', [300, 800], [500, 1500], [1000, 3000], 's'),
F('生育保险报销(预估)', function (s) { return sc3([[-5000, -2500], [-4500, -2000], [-2500, -500]][s.hosp], [1, 1.4, 1.1][s.birth]); }, 'm')
],
@@ -520,35 +543,35 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('产后 42 天复查', [200, 500], [400, 1000], [1000, 3000], 'm'),
I('宝宝 42 天体检', [200, 500], [300, 800], [800, 2000], 'm'),
I('新生儿抚触和游泳', [0, 300], [600, 1500], [2000, 5000], 's'),
I('新生儿摄影', [0, 500], [1000, 3000], [3000, 8000], 's'),
I(['满月酒和喜糖', '满月酒和喜糖', '满月宴和回礼'], [2000, 6000], [5000, 15000], [15000, 40000], 'g')
G('party', '新生儿摄影', [0, 500], [1000, 3000], [3000, 8000], 's'),
G('party', ['满月家宴和喜糖', '满月酒和喜糖', '满月宴和回礼'], [2000, 6000], [5000, 15000], [15000, 40000], 'g')
],
// ④ 0~1 岁
[
F(function (s) { return ['国产奶粉', '国产高端奶粉', '进口有机奶粉'][s.T] + ['(偶尔补充)', '(混合喂养)', '(全奶粉喂养)'][s.feed]; },
function (s) { return sc3(MILK1[s.T], MILK_F[s.feed]); }, 'g'),
I('米粉和辅食', [800, 1500], [1500, 3000], [3000, 6000], 'g'),
I('奶瓶和奶嘴', [200, 400], [400, 800], [800, 1500], 'g'),
I('温奶器、消毒器', [200, 400], [400, 900], [1000, 2500], 'g', 0.5),
I('辅食机、加湿器等小家电', [300, 800], [800, 2000], [2000, 5000], 'g', 0.6),
G('gear', '奶瓶和奶嘴', [200, 400], [400, 800], [800, 1500], 'g'),
G('gear', '温奶器、消毒器', [200, 400], [400, 900], [1000, 2500], 'g', 0.5),
G('gear', '辅食机、加湿器等小家电', [300, 800], [800, 2000], [2000, 5000], 'g', 0.6),
I('纸尿裤', [2000, 3200], [3200, 4800], [4800, 7200], 'g'),
I('湿巾和棉柔巾', [400, 700], [600, 1000], [1000, 1800], 'g'),
I('隔尿垫和口水巾', [100, 250], [200, 400], [400, 800], 'g'),
I('洗护用品和护臀膏', [300, 600], [600, 1200], [1500, 3000], 'g'),
I('婴儿床和床品', [600, 1500], [1500, 3500], [5000, 12000], 'g', 0.4),
I('推车', [300, 800], [1500, 3500], [4000, 9000], 'g', 0.4),
I('安全座椅', [400, 900], [1200, 2500], [3000, 6000], 'g', 0.5),
I('背带和腰凳', [100, 300], [300, 800], [1000, 2500], 'g', 0.5),
I('衣服鞋袜', [1000, 2000], [2000, 4000], [5000, 10000], 'g', 0.7),
I('包被和睡袋', [150, 400], [400, 800], [1000, 2500], 'g', 0.6),
I('玩具和绘本', [400, 1000], [1000, 2500], [3000, 8000], 'g', 0.7),
G('gear', '婴儿床和床品', [600, 1500], [1500, 3500], [5000, 12000], 'g', 0.4),
G('gear', '推车', [300, 800], [1500, 3500], [4000, 9000], 'g', 0.4),
G('gear', '安全座椅', [400, 900], [1200, 2500], [3000, 6000], 'g', 0.5),
G('gear', '背带和腰凳', [100, 300], [300, 800], [1000, 2500], 'g', 0.5),
G('gear', '衣服鞋袜', [1000, 2000], [2000, 4000], [5000, 10000], 'g', 0.7),
G('gear', '包被和睡袋', [150, 400], [400, 800], [1000, 2500], 'g', 0.6),
G('gear', '玩具和绘本', [400, 1000], [1000, 2500], [3000, 8000], 'g', 0.7),
D('extra', ['亲子游戏(在家)', '亲子早教体验课', '亲子早教年卡'], [[0, 500], [2000, 5000], [10000, 20000]], 's'),
I(['自费疫苗(少量)', '自费疫苗(13 价、五联等)', '自费疫苗全打'], [500, 2000], [4000, 6000], [6000, 9000], '0'),
I(['儿保体检', '儿保体检', '私立儿科体检'], [200, 500], [500, 1200], [2000, 5000], 'm'),
I(['看病和医药', '看病和医药', '私立儿科看病'], [600, 2000], [1500, 3000], [4000, 10000], 'm'),
I(['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [400, 600], [800, 2000], [8000, 15000], '0'),
I('百天照、周岁照', [0, 600], [1000, 3000], [3000, 8000], 's'),
I('百天宴、周岁宴', [1000, 4000], [4000, 10000], [10000, 30000], 'g'),
G('ins', ['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [400, 600], [800, 2000], [8000, 15000], '0'),
G('party', '百天照、周岁照', [0, 600], [1000, 3000], [3000, 8000], 's'),
G('party', ['百天、周岁家宴', '百天宴、周岁宴', '百天宴、周岁宴'], [1000, 4000], [4000, 10000], [10000, 30000], 'g'),
{ g: 'care', n: function (s) { return s.care === 2 ? '育儿嫂(产假后约 8 个月)' : '老人帮带补贴'; },
fv: function (s) { return s.care === 2 ? [40000, 60000] : [SUB[0] * 0.6, SUB[1] * 0.6]; }, k: 's' }
],
@@ -558,16 +581,16 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('纸尿裤和拉拉裤', [2000, 3500], [3000, 5000], [4500, 7000], 'g'),
I('湿巾和洗护用品', [600, 1200], [1000, 2000], [2000, 4000], 'g'),
I('辅食、水果和零食', [4000, 8000], [6000, 12000], [12000, 24000], 'g'),
I('餐椅和儿童餐具', [200, 500], [500, 1200], [1500, 3500], 'g', 0.5),
I('衣服鞋袜', [2000, 4000], [4000, 8000], [10000, 20000], 'g', 0.8),
I('玩具和积木', [800, 2000], [2000, 5000], [6000, 15000], 'g', 0.8),
G('gear', '餐椅和儿童餐具', [200, 500], [500, 1200], [1500, 3500], 'g', 0.5),
G('gear', '衣服鞋袜', [2000, 4000], [4000, 8000], [10000, 20000], 'g', 0.8),
G('gear', '玩具和积木', [800, 2000], [2000, 5000], [6000, 15000], 'g', 0.8),
I('绘本', [300, 800], [800, 2000], [2000, 5000], 'g', 0.8),
I('滑板车、平衡车', [200, 500], [500, 1200], [1500, 4000], 'g', 0.6),
I('防撞角、护栏等安全用品', [100, 300], [300, 800], [800, 2000], 'g', 0.5),
G('gear', '滑板车、平衡车', [200, 500], [500, 1200], [1500, 4000], 'g', 0.6),
G('gear', '防撞角、护栏等安全用品', [100, 300], [300, 800], [800, 2000], 'g', 0.5),
I(['自费疫苗(流感等)', '自费疫苗', '自费疫苗全打'], [300, 800], [1500, 3000], [3000, 5000], '0'),
I(['儿保体检', '儿保体检', '私立儿科体检'], [300, 600], [600, 1500], [3000, 8000], 'm'),
I(['看病和医药', '看病和医药', '私立儿科看病'], [1000, 3000], [2000, 5000], [6000, 15000], 'm'),
I(['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [800, 1200], [1600, 4000], [16000, 30000], '0'),
G('ins', ['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [800, 1200], [1600, 4000], [16000, 30000], '0'),
D('extra', ['绘本和遛娃', '早教班(每周 1~2 节)', '早教和游泳、音乐等兴趣班'], [[500, 2000], [8000, 16000], [25000, 50000]], 's'),
I('游乐场和亲子游', [1000, 3000], [4000, 8000], [15000, 30000], '0'),
I('理发、照片和生日', [500, 1500], [1500, 4000], [4000, 10000], 's'),
@@ -594,7 +617,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('衣服鞋袜', [3000, 6000], [6000, 12000], [15000, 30000], 'g'),
I('玩具和绘本', [2000, 4000], [4000, 8000], [10000, 20000], 'g'),
I(['看病和医药', '看病和医药', '私立儿科看病'], [2000, 4000], [4000, 8000], [12000, 25000], 'm'),
I(['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
G('ins', ['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
I(['周边游玩', '每年一两次旅行', '出境亲子游'], [3000, 8000], [12000, 24000], [45000, 90000], '0'),
I('生日和节日礼物', [600, 1500], [1500, 4000], [5000, 12000], 'g'),
I('理发和日用品', [300, 800], [800, 1500], [1500, 3000], 's'),
@@ -621,7 +644,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('零花钱', [1000, 3000], [3000, 8000], [8000, 20000], '0'),
I(['看病和医药', '看病和医药', '私立医疗'], [3000, 6000], [6000, 12000], [20000, 40000], 'm'),
I('近视防控和看牙', [1000, 3000], [3000, 8000], [10000, 25000], 'm'),
I(['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [2400, 3600], [4800, 12000], [48000, 90000], '0'),
G('ins', ['少儿医保', '少儿医保和医疗险', '高端医疗险和重疾险'], [2400, 3600], [4800, 12000], [48000, 90000], '0'),
I(['假期游玩', '家庭旅行', '出境家庭游'], [5000, 12000], [20000, 40000], [80000, 160000], '0'),
I('生日和节日', [1200, 3000], [3000, 8000], [10000, 24000], 'g')
],
@@ -642,7 +665,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('零花钱', [1500, 4000], [4000, 9000], [10000, 25000], '0'),
I(['看病和医药', '看病和医药', '私立医疗'], [1500, 3000], [3000, 6000], [10000, 20000], 'm'),
I('眼镜和牙齿', [1500, 4000], [4000, 10000], [15000, 30000], 'm'),
I(['医保', '医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
G('ins', ['医保', '医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
I(['周边游玩', '家庭旅行', '出境家庭游'], [3000, 8000], [10000, 20000], [40000, 80000], '0'),
I('生日和节日', [600, 1500], [1500, 4000], [5000, 12000], 'g')
],
@@ -663,7 +686,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
I('衣服鞋子', [4000, 8000], [8000, 15000], [20000, 40000], 'g'),
I('零花钱', [3000, 6000], [6000, 12000], [15000, 30000], '0'),
I(['看病和医药', '看病和医药', '私立医疗'], [1500, 3000], [3000, 6000], [10000, 20000], 'm'),
I(['医保', '医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
G('ins', ['医保', '医保和医疗险', '高端医疗险和重疾险'], [1200, 1800], [2400, 6000], [24000, 45000], '0'),
I(['高考和志愿填报', '高考、志愿和升学咨询', '留学申请和背景提升'], [1000, 3000], [3000, 10000], [50000, 150000], '0'),
I('成人礼和毕业旅行', [1000, 3000], [3000, 8000], [10000, 30000], '0')
]
@@ -688,7 +711,8 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
function g(k) { return a[k] != null ? a[k] : d[k] != null ? d[k] : QK[k].d; }
return { T: tierOf(r), city: a.city == null ? 1 : a.city, kid: a.kid || 0,
hosp: g('hosp'), birth: g('birth'), yuezi: g('yuezi'), feed: g('feed'),
care: g('care'), school: g('school'), extra: g('extra') };
care: g('care'), school: g('school'), extra: g('extra'),
screen: g('screen'), gear: g('gear'), party: g('party'), ins: g('ins') };
}
function calc(r, a, stages) {
var s = ctx(r, a);
@@ -700,7 +724,7 @@ h1 .mk{background:linear-gradient(transparent 64%,rgba(24,160,88,.24) 0)}
if (d.dv) { var ai = s[d.g]; v = d.dv[ai]; name = Array.isArray(d.n) ? d.n[ai] : d.n; }
else if (d.fy) { y = d.fy(s); v = [y[0][0] + y[1][0], y[0][1] + y[1][1]]; name = d.n(s); }
else if (d.fv) { v = d.fv(s); name = d.n(s); }
else { v = d.v[s.T]; name = Array.isArray(d.n) ? d.n[s.T] : d.n; }
else { var ti = d.gk ? s[d.gk] : s.T; v = d.v[ti]; name = Array.isArray(d.n) ? d.n[ti] : d.n; }
if (!name || (!v[0] && !v[1])) return;
var lo = v[0] * f, hi = v[1] * f, m = r100((lo + hi) / 2);
var m1 = y ? r100((y[0][0] + y[0][1]) / 2 * f) : r100(m * 0.55); // 1~3 岁里属于 1~2 岁的部分