🐟 丰鲜掌柜

进销存管理系统 v0.1

丰鲜掌柜

📊 销售
🛒 采购
🏷️ 商品
📉 损耗
📅 日报
💰 赊欠
📈 统计
⚙️ 设置

🤖 AI 智能开单

输入自然语言,AI 自动解析为销售记录。例如:张三 中虾5件50斤25元 大虾10斤30元 微信

新增销售记录

销售记录

日期票号客户品种件数重量单价运费总金额结款欠款备注操作

新增采购记录

采购记录

到货日期采购日期票号供应商品种件数重量单价总金额运费已付欠款备注操作

商品管理

图片商品名称分类采购次数销售次数库存(件)库存(斤)操作

新增损耗登记

损耗记录

日期品种件数重量单价金额原因备注操作

日报汇总

请选择日期查看日报

赊欠管理

客户欠款笔数欠款总额最长逾期操作

本月销售明细

日期客户品种金额结款

店铺信息

数据管理

手机版
丰鲜掌柜
🔔
月销售额
0
赊欠总额
0
📝
录赊欠
💰
录收支
💳
快速还款
⚠️ 风险提醒
🐟 销售数据
📊 营业概况
📈 七日收入趋势
票面总额 赊欠额
💼 账户余额
⚡ 快捷操作
📉损耗登记
📋预定
📅日报查看
📋库存查看
🏠首页
📱管理
👤我的
临时客户1
+
AI开单
全部货品
新增货品
合计: 0
(0种) 选好了
商品
库存: -
数量
重量
斤单价
元/斤
运费
均重 -- 📋 上次售价 ✏️ 备注
7
8
9
下一项
4
5
6
确定
1
2
3
0
.
购物车
买家
临时客户
销售日期
今日
送达日期
今日
订单商品
⇅ 排序
货品
销量
单价
货款
备注
添加
合计: ¥0
总数 0 总重 0
收银台
 
买家 散客
时间 --:--
应收 ¥0
优惠
多收
-
现金 ¥0
现金
微信
支付宝
其他
银联
实收(元) 0
下欠(元) ¥0
管理
📝销售记录
📦采购记录
👥客户管理
📅日报
📊统计
💰应收款
📋库存
🏷️商品管理
🏠首页
📱管理
👤我的
销售记录
采购记录
商品管理
🏠首页
📱管理
👤我的
客户管理
日报
统计
应收款
< 返回
历史赊欠录入
提交
买家
请选择买家
赊欠时间
当前时间
赊欠金额
上传赊欠记录
0/9
+
拍照上传
备注
添加
💳 快速还款
加载中...
📋 赊欠清单
加载中...
< 返回
录收支
提交
支出
收入
转账
金额
账户
请选择账户
分类
请选择分类
📅 日期
对方
备注
添加
上传凭证
0/9
+
拍照上传
📋 预定队列
➕ 新建
̷̵ 损耗登记
金额: 0 元
近期损耗
库存
添加销售记录
日期
客户
品种
件数(选填)
数量(斤)
单价(元/斤)
运费(元)
总额:¥0.00
付款方式
抹零/优惠(元)
已收金额(元)
备注
🐟
丰鲜掌柜 v0.1
☁️ 云端同步
📊 同步状态未同步
📥 云端恢复
📤 导出数据
📥 本地恢复
🏠首页
📱管理
👤我的
'); printWin.document.close(); printWin.print(); }; btnBar.appendChild(printBtn); const feieBtn = document.createElement('button'); feieBtn.textContent = '☁️ 云打印'; feieBtn.className = 'btn btn-info'; feieBtn.onclick = function() { deskFeiePrint(saleId, 'madan'); }; btnBar.appendChild(feieBtn); const btBtn = document.createElement('button'); btBtn.textContent = '📱 蓝牙打印'; btBtn.className = 'btn btn-primary'; btBtn.onclick = async function() { const sale = DB.salesData.find(s => String(s.id) === String(saleId)); if (!sale) { showToast('未找到订单'); return; } const tn = sale.ticketNo; const sameTicket = tn ? DB.salesData.filter(s => s.ticketNo === tn) : [sale]; if (typeof _btPrint === 'function') { await _btPrint(sameTicket[0], 'madan'); } else { showToast('蓝牙打印功能未加载'); } }; btnBar.appendChild(btBtn); const closeBtn = document.createElement('button'); closeBtn.textContent = '✕ 关闭'; closeBtn.className = 'btn btn-default'; closeBtn.onclick = function() { overlay.remove(); }; btnBar.appendChild(closeBtn); overlay.appendChild(btnBar); document.body.appendChild(overlay); } // ===== 云打印(飞鹅) ===== function _getSaleItems(sale) { if (!sale) return []; if (sale.items && Array.isArray(sale.items)) return sale.items; return [sale]; } function _buildFeieContent(sales, type) { if (!Array.isArray(sales)) sales = [sales]; let items = []; sales.forEach(function(sa) { items = items.concat(_getSaleItems(sa)); }); const customer = (sales[0] && sales[0].customer) || '散客'; const dateStr = (sales[0] && sales[0].date) || ''; let shipping = 0, totalAmt = 0, owed = 0, paid = 0, payment = '', note = ''; sales.forEach(function(sa) { shipping += parseFloat(sa.shipping) || 0; totalAmt += (parseFloat(sa.amount) || 0) - (parseFloat(sa.shipping) || 0); owed += (parseFloat(sa.owed) || 0); paid += parseFloat(sa.paid) || 0; payment = sa.payment || payment; if (sa.note) note = sa.note; }); let c = ''; if (type === 'madan') { c += '配货码单
'; c += '客户: ' + customer + '
'; c += '日期: ' + dateStr + '
'; c += '共' + items.length + '条
'; c += '--------------------------------
'; c += '品种 件 重量 核对
'; items.forEach(function(it) { const v = (it.variety || '').substring(0, 4); const cnt = parseInt(it.count) || 0; const qty = parseFloat(it.quantity) || 0; c += '' + v.padEnd(8, ' ') + ' ' + (cnt > 0 ? String(cnt).padStart(3, ' ') : ' ') + ' ' + (qty > 0 ? String(qty).padStart(5, ' ') : ' ') + ' [ ]
'; }); c += '--------------------------------
'; c += '配货清点单 · 无金额
'; c += '
'; } else { c += '' + (shopName || '丰鲜掌柜') + ' 销售单
'; c += '客户: ' + customer + '
'; c += '日期: ' + dateStr + '
'; if (note) c += '备注: ' + note + '
'; c += '--------------------------------
'; c += '品种 件 重量 单价 金额
'; items.forEach(function(it) { const v = (it.variety || '').substring(0, 4); const qty = parseFloat(it.quantity) || 0; const cnt = parseInt(it.count) || 0; const prc = parseFloat(it.price) || 0; const amt = cnt > 0 ? (qty > 0 ? cnt * qty * prc : cnt * prc) : qty * prc; c += '' + v.padEnd(8, ' ') + ' ' + (cnt > 0 ? String(cnt).padStart(3, ' ') : ' ') + ' ' + (qty > 0 ? String(qty).padStart(5, ' ') : ' ') + ' ' + String(prc).padStart(5, ' ') + ' ' + String(amt.toFixed(0)).padStart(7, ' ') + '
'; }); c += '--------------------------------
'; if (shipping > 0) c += '运费: ' + shipping + '元
'; const grand = totalAmt + (shipping > 0 ? shipping : 0); c += '合计: ' + grand.toFixed(0) + '元
'; if (paid > 0) c += '已收: ' + paid.toFixed(0) + '元
'; c += '付款: ' + payment + '
'; if (owed > 0) { c += '欠款: ' + owed.toFixed(0) + '元
'; c += '
请微信扫码付款

'; var _payQr = localStorage.getItem('pay_qr_url') || DB.payQrCode || ''; if (_payQr) c += '' + _payQr + '
'; } c += '
谢谢惠顾
'; c += '
'; var _slogan = localStorage.getItem('shop_slogan') || (shopName || '丰鲜掌柜') + ' 出品'; c += '' + _slogan + '
'; var _addr = localStorage.getItem('shop_addr') || ''; var _phone = localStorage.getItem('shop_phone') || ''; if (_addr) c += '地址: ' + _addr + '
'; if (_phone) c += '电话: ' + _phone + '
'; c += '
丰鲜掌柜软件开发团队张涛

'; } return c; } async function _feiePrint(sales, type, times) { if (!sales || !sales.length) { showToast('未找到订单'); return; } showToast('正在发送打印...'); try { const content = _buildFeieContent(sales, type); await api('/feie-print', 'POST', { content, times: times || 1 }); showToast('打印已发送'); } catch(e) { showToast('打印失败: ' + e.message); } } function deskFeiePrint(saleId, type, times) { const sale = DB.salesData.find(s => String(s.id) === String(saleId)); if (!sale) { showToast('未找到订单'); return; } const tn = sale.ticketNo; const sameTicket = tn ? DB.salesData.filter(s => s.ticketNo === tn) : [sale]; _feiePrint(sameTicket, type || 'sale', times || 1); } async function deskBtPrint(saleId) { const sale = DB.salesData.find(s => String(s.id) === String(saleId)); if (!sale) { showToast('未找到订单'); return; } const tn = sale.ticketNo; const sameTicket = tn ? DB.salesData.filter(s => s.ticketNo === tn) : [sale]; if (typeof _btPrint === 'function') { await _btPrint(sameTicket[0], 'sale'); } else { showToast('蓝牙打印功能未加载'); } }