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

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

mw_tool · 上传者 驰旭教育
← 返回详情
r110/app.js · 约 3366 字符
1/* r110 家有账 · 公共交互(纯原生 JS,无任何依赖) */
2function $(s, r) { return (r || document).querySelector(s); }
3function $$(s, r) { return Array.prototype.slice.call((r || document).querySelectorAll(s)); }
4
5function money(n, sign) {
6  var v = Math.abs(Number(n) || 0).toFixed(2);
7  var p = v.split('.');
8  p[0] = p[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
9  var s = p[0] + '.' + p[1];
10  if (sign === 'pay') return '-' + s;
11  if (sign === 'inc') return '+' + s;
12  return s;
13}
14function money0(n) {
15  return (Math.round(Number(n) || 0)).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
16}
17function toast(msg, ms) {
18  var t = $('#toast'); if (!t) { return; }
19  t.textContent = msg; t.classList.add('on');
20  clearTimeout(t._tm); t._tm = setTimeout(function () { t.classList.remove('on'); }, ms || 1700);
21}
22function openSheet(id) {
23  var m = $('#mask'), s = $(id);
24  if (m) m.classList.add('on');
25  if (s) s.classList.add('on');
26}
27function closeSheet() {
28  var m = $('#mask');
29  if (m) m.classList.remove('on');
30  $$('.sheet').forEach(function (s) { s.classList.remove('on'); });
31}
32function bindMask() {
33  var m = $('#mask'); if (m) m.addEventListener('click', closeSheet);
34  $$('[data-close]').forEach(function (b) { b.addEventListener('click', closeSheet); });
35  $$('[data-sheet]').forEach(function (b) {
36    b.addEventListener('click', function () { openSheet(b.getAttribute('data-sheet')); });
37  });
38}
39/* 分段器 / chips 通用:回调 (value, el) */
40function segGroup(sel, cb) {
41  var box = $(sel); if (!box) return;
42  $$('span', box).forEach(function (s) {
43    s.addEventListener('click', function () {
44      $$('span', box).forEach(function (x) { x.classList.remove('on'); });
45      s.classList.add('on');
46      if (cb) cb(s.getAttribute('data-v') || s.textContent.trim(), s);
47    });
48  });
49}
50function segValue(sel) {
51  var on = $(sel + ' span.on');
52  return on ? (on.getAttribute('data-v') || on.textContent.trim()) : '';
53}
54/* 演示态占位提示 */
55function demoTip(msg) {
56  return function (e) { if (e) e.preventDefault(); toast(msg); };
57}
58function bindDemo() {
59  $$('[data-tip]').forEach(function (el) {
60    el.addEventListener('click', demoTip(el.getAttribute('data-tip')));
61  });
62}
63/* 环形进度 SVG */
64function ringSvg(pct, color, size, w) {
65  size = size || 118; w = w || 11;
66  var r = (size - w) / 2, c = 2 * Math.PI * r;
67  var off = c * (1 - Math.max(0, Math.min(1, pct)));
68  return '<svg width="' + size + '" height="' + size + '">' +
69    '<circle cx="' + size / 2 + '" cy="' + size / 2 + '" r="' + r + '" fill="none" stroke="#eef2f0" stroke-width="' + w + '"/>' +
70    '<circle cx="' + size / 2 + '" cy="' + size / 2 + '" r="' + r + '" fill="none" stroke="' + color + '" stroke-width="' + w +
71    '" stroke-linecap="round" stroke-dasharray="' + c.toFixed(1) + '" stroke-dashoffset="' + off.toFixed(1) + '"/></svg>';
72}
73/* 读取自定义流水(记一笔页写入) */
74function myBills() { return SG.get('bills', []); }
75function allBills() { return myBills().concat(BILLS); }
76
77document.addEventListener('DOMContentLoaded', function () {
78  bindMask(); bindDemo();
79  /* 底部购物式角标:显示本地新增笔数 */
80  var n = myBills().length, b = $('#tabBadge');
81  if (b && n > 0) { b.textContent = n; b.style.display = 'block'; }
82});
83