首页/ mobileweb/ 家有账 · 家庭共享记账工具(移动端 H5)/ 代码预览

💻 代码预览 · 家有账 · 家庭共享记账工具(移动端 H5)

mw_tool · 上传者 驰旭教育
← 返回详情
r110/data.js · 约 10866 字符
1/* r110 家有账 · 种子数据与本地存储 */
2var SG = {
3  k: function (n) { return 'jyz_' + n; },
4  get: function (n, d) {
5    try { var v = localStorage.getItem(SG.k(n)); return v ? JSON.parse(v) : d; } catch (e) { return d; }
6  },
7  set: function (n, v) { try { localStorage.setItem(SG.k(n), JSON.stringify(v)); } catch (e) {} }
8};
9
10/* 支出分类 */
11var CATS = [
12  { id: 'food', n: '餐饮', e: '🍜', c: '#ff7a45' },
13  { id: 'grocery', n: '买菜', e: '🥬', c: '#52c41a' },
14  { id: 'traffic', n: '交通', e: '🚌', c: '#40a9ff' },
15  { id: 'shop', n: '购物', e: '🛍️', c: '#f759ab' },
16  { id: 'house', n: '居住', e: '🏠', c: '#9254de' },
17  { id: 'util', n: '水电燃', e: '💡', c: '#faad14' },
18  { id: 'phone', n: '通讯', e: '📱', c: '#13c2c2' },
19  { id: 'medical', n: '医疗', e: '💊', c: '#ff4d4f' },
20  { id: 'edu', n: '教育', e: '📚', c: '#2f54eb' },
21  { id: 'fun', n: '娱乐', e: '🎬', c: '#eb2f96' },
22  { id: 'gift', n: '人情', e: '🎁', c: '#fa541c' },
23  { id: 'baby', n: '母婴', e: '🍼', c: '#ffc069' },
24  { id: 'pet', n: '宠物', e: '🐶', c: '#a0d911' },
25  { id: 'cloth', n: '服饰', e: '👕', c: '#597ef7' },
26  { id: 'daily', n: '日用', e: '🧴', c: '#36cfc9' },
27  { id: 'beauty', n: '美容', e: '💄', c: '#ff85c0' },
28  { id: 'sport', n: '运动', e: '🏸', c: '#73d13d' },
29  { id: 'travel', n: '旅行', e: '✈️', c: '#4096ff' },
30  { id: 'car', n: '汽车', e: '🚗', c: '#8c8c8c' },
31  { id: 'repay', n: '还款', e: '💳', c: '#d4380d' },
32  { id: 'other', n: '其他', e: '📦', c: '#8c8c8c' }
33];
34/* 收入分类 */
35var INCATS = [
36  { id: 'salary', n: '工资', e: '💰', c: '#0f9d76' },
37  { id: 'bonus', n: '奖金', e: '🧧', c: '#e5484d' },
38  { id: 'parttime', n: '兼职', e: '💼', c: '#2f54eb' },
39  { id: 'invest', n: '理财', e: '📈', c: '#faad14' },
40  { id: 'reimb', n: '报销', e: '🧾', c: '#13c2c2' },
41  { id: 'redpkg', n: '红包', e: '🎊', c: '#f759ab' },
42  { id: 'rent', n: '租金', e: '🏘️', c: '#9254de' },
43  { id: 'inother', n: '其他', e: '➕', c: '#8c8c8c' }
44];
45function catOf(id) {
46  var i;
47  for (i = 0; i < CATS.length; i++) { if (CATS[i].id === id) return CATS[i]; }
48  for (i = 0; i < INCATS.length; i++) { if (INCATS[i].id === id) return INCATS[i]; }
49  return { id: id, n: '其他', e: '📦', c: '#8c8c8c' };
50}
51
52/* 账户 */
53var ACCOUNTS = [
54  { id: 'a1', n: '招商银行储蓄卡', e: '🏦', tail: '6688', bal: 86420.35, kind: 'fund', c: '#e5484d' },
55  { id: 'a2', n: '微信零钱', e: '💚', tail: '', bal: 3286.4, kind: 'fund', c: '#16a34a' },
56  { id: 'a3', n: '支付宝余额', e: '🔵', tail: '', bal: 1875.6, kind: 'fund', c: '#2563eb' },
57  { id: 'a4', n: '余额宝', e: '🐷', tail: '', bal: 52300.0, kind: 'fund', c: '#f59e0b' },
58  { id: 'a5', n: '现金钱包', e: '💵', tail: '', bal: 620.0, kind: 'fund', c: '#0f9d76' },
59  { id: 'a6', n: '招行信用卡', e: '💳', tail: '3021', bal: -4286.5, kind: 'credit', limit: 50000, bill: '每月 5 日', due: '每月 23 日', c: '#7c5cff' },
60  { id: 'a7', n: '中信信用卡', e: '💳', tail: '7712', bal: -1320.0, kind: 'credit', limit: 30000, bill: '每月 12 日', due: '每月 30 日', c: '#d4380d' },
61  { id: 'a8', n: '天天基金', e: '📈', tail: '', bal: 68900.0, kind: 'invest', profit: 4260.8, c: '#faad14' },
62  { id: 'a9', n: '公积金账户', e: '🏛️', tail: '', bal: 43800.0, kind: 'invest', profit: 0, c: '#2f54eb' }
63];
64function accOf(id) {
65  for (var i = 0; i < ACCOUNTS.length; i++) { if (ACCOUNTS[i].id === id) return ACCOUNTS[i]; }
66  return { id: id, n: '未知账户', e: '💼', c: '#8c8c8c' };
67}
68
69/* 家庭成员 */
70var MEMBERS = [
71  { id: 'm1', n: '我', role: '管理员', e: '🙋', c: '#0f9d76', perm: '全部权限', month: 4286.5, cnt: 68 },
72  { id: 'm2', n: '老公', role: '成员', e: '👨', c: '#2563eb', perm: '记账 + 查看', month: 3620.0, cnt: 41 },
73  { id: 'm3', n: '妈妈', role: '成员', e: '👵', c: '#f59e0b', perm: '记账 + 查看', month: 1980.4, cnt: 53 },
74  { id: 'm4', n: '女儿', role: '成员', e: '👧', c: '#f759ab', perm: '仅记账', month: 486.0, cnt: 12 }
75];
76function memOf(id) {
77  for (var i = 0; i < MEMBERS.length; i++) { if (MEMBERS[i].id === id) return MEMBERS[i]; }
78  return MEMBERS[0];
79}
80
81/* 账本 */
82var BOOKS = [
83  { id: 'b1', n: '家庭日常账本', e: '🏡', desc: '4 位成员 · 本月 174 笔', on: true },
84  { id: 'b2', n: '我的个人账本', e: '👛', desc: '仅自己可见 · 本月 26 笔', on: false },
85  { id: 'b3', n: '装修专项账本', e: '🔨', desc: '预算 18 万 · 已用 62%', on: false },
86  { id: 'b4', n: '宝宝成长账本', e: '🍼', desc: '记录教育与养育开销', on: false }
87];
88
89/* 流水(date: YYYY-MM-DD) */
90var BILLS = [
91  { id: 't01', t: 'pay', cat: 'food', n: '海底捞 · 家庭聚餐', amt: 486.00, acc: 'a6', mem: 'm2', date: '2026-08-06', time: '19:24', note: '女儿生日小聚,用了 8 折券', tags: ['聚餐'] },
92  { id: 't02', t: 'pay', cat: 'grocery', n: '盒马鲜生 · 生鲜采买', amt: 168.50, acc: 'a2', mem: 'm3', date: '2026-08-06', time: '09:12', note: '牛肉、三文鱼、时蔬', tags: [] },
93  { id: 't03', t: 'pay', cat: 'traffic', n: '地铁通勤', amt: 12.00, acc: 'a3', mem: 'm1', date: '2026-08-06', time: '08:05', note: '', tags: [] },
94  { id: 't04', t: 'inc', cat: 'reimb', n: '公司差旅报销到账', amt: 1280.00, acc: 'a1', mem: 'm1', date: '2026-08-05', time: '16:40', note: '7 月杭州出差', tags: ['报销'] },
95  { id: 't05', t: 'pay', cat: 'edu', n: '女儿钢琴课 · 8 月课时', amt: 1600.00, acc: 'a1', mem: 'm1', date: '2026-08-05', time: '10:30', note: '共 8 节课', tags: ['固定'] },
96  { id: 't06', t: 'pay', cat: 'util', n: '8 月电费', amt: 236.80, acc: 'a2', mem: 'm3', date: '2026-08-05', time: '08:50', note: '空调开得多', tags: ['周期'] },
97  { id: 't07', t: 'pay', cat: 'shop', n: '京东 · 空气炸锅', amt: 399.00, acc: 'a6', mem: 'm2', date: '2026-08-04', time: '21:10', note: '', tags: [] },
98  { id: 't08', t: 'pay', cat: 'medical', n: '社区医院 · 儿童体检', amt: 320.00, acc: 'a1', mem: 'm3', date: '2026-08-04', time: '14:20', note: '医保报销 120 元后自费', tags: [] },
99  { id: 't09', t: 'pay', cat: 'food', n: '楼下早餐铺', amt: 18.00, acc: 'a5', mem: 'm1', date: '2026-08-04', time: '07:40', note: '', tags: [] },
100  { id: 't10', t: 'inc', cat: 'salary', n: '8 月工资 · 我', amt: 16800.00, acc: 'a1', mem: 'm1', date: '2026-08-03', time: '10:00', note: '已扣五险一金', tags: ['固定'] },
101  { id: 't11', t: 'inc', cat: 'salary', n: '8 月工资 · 老公', amt: 13500.00, acc: 'a1', mem: 'm2', date: '2026-08-03', time: '10:00', note: '', tags: ['固定'] },
102  { id: 't12', t: 'pay', cat: 'house', n: '房贷月供', amt: 6820.00, acc: 'a1', mem: 'm1', date: '2026-08-03', time: '09:00', note: '剩余 218 期', tags: ['周期', '固定'] },
103  { id: 't13', t: 'pay', cat: 'pet', n: '猫粮 + 猫砂', amt: 268.00, acc: 'a3', mem: 'm4', date: '2026-08-02', time: '15:30', note: '', tags: [] },
104  { id: 't14', t: 'pay', cat: 'fun', n: '电影票 x3', amt: 126.00, acc: 'a2', mem: 'm2', date: '2026-08-02', time: '20:00', note: '暑期档动画', tags: [] },
105  { id: 't15', t: 'pay', cat: 'cloth', n: '优衣库 · 换季衣物', amt: 596.00, acc: 'a6', mem: 'm1', date: '2026-08-01', time: '16:12', note: '一家三口', tags: [] },
106  { id: 't16', t: 'pay', cat: 'gift', n: '同事结婚随礼', amt: 800.00, acc: 'a2', mem: 'm2', date: '2026-08-01', time: '11:00', note: '', tags: ['人情'] },
107  { id: 't17', t: 'inc', cat: 'invest', n: '基金赎回收益', amt: 862.30, acc: 'a4', mem: 'm1', date: '2026-08-01', time: '15:00', note: '持有 14 个月', tags: [] },
108  { id: 't18', t: 'pay', cat: 'daily', n: '山姆 · 家庭日用囤货', amt: 742.60, acc: 'a6', mem: 'm3', date: '2026-07-31', time: '17:45', note: '纸巾、洗衣液、牛奶', tags: [] }
109];
110
111/* 分类预算 */
112var BUDGETS = [
113  { cat: 'food', limit: 2800, used: 2186.5 },
114  { cat: 'grocery', limit: 1600, used: 1248.3 },
115  { cat: 'traffic', limit: 600, used: 386.0 },
116  { cat: 'shop', limit: 1500, used: 1682.0 },
117  { cat: 'edu', limit: 2000, used: 1600.0 },
118  { cat: 'util', limit: 700, used: 536.8 },
119  { cat: 'fun', limit: 800, used: 426.0 },
120  { cat: 'medical', limit: 600, used: 320.0 }
121];
122var BUDGET_TOTAL = { limit: 16000, used: 12386.9, leftDays: 25 };
123
124/* 储蓄目标 */
125var GOALS = [
126  { n: '三亚亲子旅行基金', e: '🏝️', target: 30000, saved: 21600, due: '2026-12-31' },
127  { n: '换车首付', e: '🚙', target: 120000, saved: 58400, due: '2027-06-30' },
128  { n: '女儿教育金', e: '🎓', target: 200000, saved: 96800, due: '2032-09-01' }
129];
130
131/* 周期账单 */
132var RECURS = [
133  { n: '房贷月供', e: '🏠', amt: 6820, day: '每月 3 日', acc: 'a1', on: true },
134  { n: '物业费', e: '🧹', amt: 386, day: '每月 8 日', acc: 'a2', on: true },
135  { n: '宽带 + 手机套餐', e: '📶', amt: 268, day: '每月 10 日', acc: 'a3', on: true },
136  { n: '车位租金', e: '🅿️', amt: 450, day: '每月 15 日', acc: 'a2', on: false }
137];
138
139/* 待办提醒 */
140var TODOS = [
141  { n: '招行信用卡待还', e: '💳', amt: 4286.5, sub: '8 月 23 日到期 · 还有 17 天', lv: 'a' },
142  { n: '女儿秋季学费', e: '🎒', amt: 5800.0, sub: '8 月 20 日前缴纳', lv: 'r' },
143  { n: '车险续保', e: '🚗', amt: 3260.0, sub: '9 月 2 日到期', lv: 'b' }
144];
145
146/* 近 6 月收支 */
147var TREND = [
148  { m: '3月', inc: 30100, pay: 18620 },
149  { m: '4月', inc: 30300, pay: 21480 },
150  { m: '5月', inc: 32800, pay: 19260 },
151  { m: '6月', inc: 30300, pay: 24310 },
152  { m: '7月', inc: 34200, pay: 22860 },
153  { m: '8月', inc: 32442, pay: 12386 }
154];
155
156/* 分类占比(本月支出) */
157var PIE = [
158  { cat: 'house', v: 6820 },
159  { cat: 'food', v: 2186 },
160  { cat: 'edu', v: 1600 },
161  { cat: 'shop', v: 1682 },
162  { cat: 'grocery', v: 1248 },
163  { cat: 'gift', v: 800 },
164  { cat: 'daily', v: 742 },
165  { cat: 'other', v: 1308 }
166];
167
168/* 日历热力(本月 1-31 日支出) */
169var DAYPAY = [1596, 394, 6820, 338, 2156, 666, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
170
171/* 家庭动态 */
172var FEEDS = [
173  { mem: 'm3', act: '记了一笔', n: '盒马鲜生 · 生鲜采买', amt: 168.5, t: '今天 09:12' },
174  { mem: 'm2', act: '记了一笔', n: '海底捞 · 家庭聚餐', amt: 486.0, t: '今天 19:24' },
175  { mem: 'm1', act: '修改了预算', n: '购物类月预算 1200 → 1500', amt: 0, t: '昨天 21:05' },
176  { mem: 'm4', act: '记了一笔', n: '猫粮 + 猫砂', amt: 268.0, t: '8 月 2 日' },
177  { mem: 'm1', act: '邀请成员加入', n: '妈妈 加入家庭日常账本', amt: 0, t: '7 月 28 日' }
178];
179