实时汇率●央行
刷新
中国人民银行中间价
ECB参考汇率(备用)
公布时间: {{ erLatestRates.publish_time || erLatestRates.date }}
| 同步于 {{ erLatestSyncedAt }}
{{ r.base }}/{{ r.code }}
{{ r.name }}
{{ r.rate.toFixed(4) }}
{{ r.change===0 ? '持平' : (r.change>0?'▲ +':'▼ ')+r.change.toFixed(6)+' ('+r.change_pct+'%)' }}
无匹配货币
加载中...
→
7天
30天
90天
180天
1年
查询
中国人民银行中间价
ECB参考汇率(备用)
央行中间价历史由平台逐交易日自动累积
点击图中数据点可查看对应日期的汇率值
请点击查询加载数据
区间变动
{{ parseFloat(erHistStats.change)>=0?'+':'' }}{{ erHistStats.change }} ({{ erHistStats.changePct }}%)
{{ erConvResult.result }} {{ erConvResult.to }}
1 {{ erConvResult.from }} = {{ erConvResult.rate.toFixed(4) }} {{ erConvResult.to }} | 数据日期: {{ erConvResult.date }}
已设置预警
暂无预警
{{ a.from }}/{{ a.to }} 汇率{{ a.condition==='above'?'高于':'低于' }} {{ a.threshold }} | 创建于 {{ a.createdAt }}
{{ a.status==='monitoring'?'监控中':'已触发' }}
删除
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
{{ row.drug_name }}
{{ row.logistics_intercepted }}
¥{{ row.return_logistics_amount }}
¥{{ row.return_tax_amount }}
{{ row.status }}
详情
编辑
确认完成
删除
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
{{ row.drug_name }}
{{ row.logistics_intercepted }}
¥{{ row.return_logistics_amount }}
¥{{ row.return_tax_amount }}
{{ row.status }}
详情
删除
经营概览
本周
本月
本季度
本年
数据范围: {{ overview.date_range.start }} 至 {{ overview.date_range.end }}
采购入库
采购单数
{{ overview.purchase.order_count }}
已入库
{{ overview.purchase.inbound_count }}
采购数量
{{ overview.purchase.total_qty }}
采购金额
¥{{ fmt(overview.purchase.total_amount) }}
销售出库
订单数
{{ overview.sales.order_count }}
销售数量
{{ overview.sales.total_qty }}
销售收入
¥{{ fmt(overview.sales.revenue) }}
销售利润
¥{{ fmt(overview.sales.profit) }}
库存管理
库存品种
{{ overview.inventory.total_sku }}
库存总量
{{ overview.inventory.total_qty }}
库存总金额
¥{{ fmt(overview.inventory.total_value) }}
利润率
{{ overview.sales ? overview.sales.margin : 0 }}%
{{ z.name }}
销售收入
¥{{ fmt(z.revenue) }}
点击穿透查询订单 →
采购订单
入库明细
¥{{ row.total_amount }}
{{ row.status }}
详情
编辑
审批
确认入库
取消
删除
供应商采购分布(点击方块穿透该供应商采购订单)
🏭 {{ sp.supplier_name }}
采购单数
{{ sp.order_count }}
采购金额
¥{{ sp.total_amount }}
点击查看订单 →
查询
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
-
{{ row.sku }}
🖼️
{{ row.drug_name }}
{{ row.type }}
¥{{ fmt(row.total_amount) }}
编辑
删除
采购价格趋势
🏭
合作伙伴总数
{{ supplierList.length }}
✅
合作中
{{ supplierList.filter(s=>s.status==='启用').length }}
📦
采购SKU总数
{{ supplierList.reduce((t,s)=>t+(s.sku_count||0),0) }}
{{ row.code }}
{{ row.name }}
{{ row.sku_count || 0 }}
{{ row.status }}
编辑
删除
🏪
店铺总数
{{ shopOnlyList.length }}
✅
启用中
{{ shopOnlyList.filter(c=>c.status==='启用').length }}
📄
停用中
{{ shopOnlyList.filter(c=>c.status!=='启用').length }}
{{ row.code }}
-
{{ row.name }}
{{ row.status }}
编辑
删除
👥
客户总数
{{ customerOnlyList.length }}
✅
启用中
{{ customerOnlyList.filter(c=>c.status==='启用').length }}
📄
停用中
{{ customerOnlyList.filter(c=>c.status!=='启用').length }}
{{ row.code }}
-
{{ row.name }}
{{ row.status }}
编辑
删除
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ row.amount }}
{{ row.status }}
详情
编辑
审批
出库
取消
完成
删除
仓库出库分布(点击方块穿透该仓库销售出库数据)
📦 {{ w.warehouse_name }}
出库金额
¥{{ w.total_amount }}
点击查看出库明细 →
{{ row.ref }}
{{ row.transfer_date || '-' }}
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
-
{{ row.status }}
详情
修改
编辑
审批
删除
新建调库单为「待审批」状态,审批通过后才执行库存调拨(出货仓库减库存、入货仓库加库存,双向记录库存流水,总量不变)
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ row.total_amount }}
详情
审批
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ row.amount }}
详情
审批
{{ row.ref }}
{{ (row.items_detail||[]).map(i => i.drug_name + '×' + i.qty).join(';') }}
详情
审批
{{ row.ref }}
{{ row.from_drug_name }}({{ row.from_spec }}) ×{{ row.from_qty }}
{{ row.to_drug_name }}({{ row.to_spec }}) ×{{ row.to_qty }}(1:{{ row.ratio }})
审批
删除
{{ row.sku }}
¥{{ (row.cost_price||0).toFixed(2) }}
¥{{ (row.sale_price||0).toFixed(2) }}
{{ row.margin }}%
-
审批
各角色提交的采购单 / 销售单 / 调库单 / 拆盒转换单 / 货盘调价单均流转至此,超级管理员审批通过后方可进入下一流程(入库 / 出库 / 调拨 / 转换 / 价格生效)
{{ row.sku }}
{{ row.drug_name }}
{{ row.type }}
{{ row.stock }}
¥{{ (row.cost_price||0).toFixed(2) }}
¥{{ row.stock_value }}
编辑
删除
点击「实时库存」数字可查看库存数据链条(初始库存 + 采购入库 - 销售出库 + 退货入库 - 退货补发 + 拆盒转换等全部流水)
新建拆盒转换
将整盒货品转换为拆盒货品,例如:1盒100粒 → 10版×10粒。转换后源货品(整盒)库存减少,目标货品(拆盒)库存按比例增加,全程记录库存流水。
1 盒 =
版
{{ splitFromName }} ×{{ splitForm.qty||0 }} → {{ splitToName }} ×{{ (splitForm.qty||0)*(splitForm.ratio||0) }}
提交拆盒转换单
提交后需超级管理员审批,审批通过才执行转换
拆盒转换记录
{{ row.status }}
{{ row.from_drug_name }}({{ row.from_spec }})
{{ row.to_drug_name }}({{ row.to_spec }})
仓库库存分布(点击方块穿透仓库库存明细)
🏪 {{ w.warehouse_name }}
库存价值
¥{{ w.total_value }}
点击查看明细 →
{{ row.items_detail.map(i=>i.drug_name+'×'+i.qty).join(';') }}
¥{{ row.total_amount }}
{{ row.status }}
退单
详情
{{ row.items_detail.map(i=>i.drug_name+'×'+i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ row.amount }}
{{ row.status }}
退单
详情
{{ row.type }}
{{ row.status }}
编辑
删除
利润核算汇总(按周期)
¥{{ fmt(row.revenue) }}
¥{{ fmt(row.cost) }}
¥{{ fmt(row.logistics) }}
¥{{ fmt(row.prescription) }}
¥{{ fmt(row.profit) }}
按仓库利润
¥{{ c.revenue }}
¥{{ c.cost }}
¥{{ c.logistics || 0 }}
¥{{ c.prescription || 0 }}
¥{{ c.profit }}
{{ c.margin }}%
¥{{ row.revenue }}
¥{{ row.cost }}
¥{{ row.logistics || 0 }}
¥{{ row.prescription || 0 }}
¥{{ row.profit }}
{{ row.margin }}%
按客户利润
{{ row.type }}
¥{{ row.revenue }}
¥{{ row.cost }}
¥{{ row.logistics || 0 }}
¥{{ row.prescription || 0 }}
¥{{ row.profit }}
{{ row.margin }}%
{{ row.sku }}
{{ row.type }}
¥{{ (row.cost_price||0).toFixed(2) }}
¥{{ (row.sale_price||0).toFixed(2) }}
{{ row.margin }}%
-
编辑
调价
历史调价
删除
¥{{ Number(row.cost_price||0).toFixed(2) }}
¥{{ Number(row.pan_price||0).toFixed(2) }}
¥{{ Number(row.sale_price||0).toFixed(2) }}
¥{{ Number(row.logistics_fee||0).toFixed(2) }}
¥{{ Number(row.prescription_fee||0).toFixed(2) }}
¥{{ Number(row.longmen_fee||0).toFixed(2) }}
{{ (Number(row.platform_rate||0)*100).toFixed(1) }}%
¥{{ Number(row.platform_fee||0).toFixed(2) }}
{{ (Number(row.customs_rate||0)*100).toFixed(1) }}%
¥{{ Number(row.customs_fee||0).toFixed(2) }}
¥{{ Number(row.owner_profit||0).toFixed(2) }}
¥{{ Number(row.pan_profit||0).toFixed(2) }}
¥{{ Number(row.shop_profit||0).toFixed(2) }}
{{ (row.owner_margin*100).toFixed(2) }}%
-
{{ (row.pan_margin*100).toFixed(2) }}%
-
{{ (row.shop_margin*100).toFixed(2) }}%
-
详情
编辑
历史上品
删除
核算口径:平台扣点费用=扣点×实时售价;海关税费=税点×实时售价;科嘉总收益=实时售价−物流−海关税费−扣点费用−实际成本价−平台处方费用−龙门处方;货盘收益=货盘价−成本价;店铺收益=总收益−货盘收益。本页仅显示每品种在每仓库的最新上品记录,历史记录请点「历史上品」
{{ row.sku }}
¥{{ (row.cost_price||0).toFixed(2) }}
¥{{ (row.sale_price||0).toFixed(2) }}
{{ row.margin }}%
-
关闭
{{ listingDetailData.warehouse_name || '-' }}
{{ listingDetailData.platform }}
{{ listingDetailData.created_at }}
{{ listingDetailData.drug_name }}
{{ listingDetailData.spec || '-' }}
¥{{ Number(listingDetailData.cost_price||0).toFixed(2) }}
¥{{ Number(listingDetailData.pan_price||0).toFixed(2) }}
¥{{ Number(listingDetailData.sale_price||0).toFixed(2) }}
¥{{ Number(listingDetailData.logistics_fee||0).toFixed(2) }}
¥{{ Number(listingDetailData.prescription_fee||0).toFixed(2) }}
¥{{ Number(listingDetailData.longmen_fee||0).toFixed(2) }}
{{ (Number(listingDetailData.platform_rate||0)*100).toFixed(1) }}%
¥{{ Number(listingDetailData.platform_fee||0).toFixed(2) }}
{{ (Number(listingDetailData.customs_rate||0)*100).toFixed(1) }}%
¥{{ Number(listingDetailData.customs_fee||0).toFixed(2) }}
¥{{ Number(listingDetailData.owner_profit||0).toFixed(2) }}
¥{{ Number(listingDetailData.pan_profit||0).toFixed(2) }}
¥{{ Number(listingDetailData.shop_profit||0).toFixed(2) }}
{{ listingDetailData.owner_margin!==null && listingDetailData.owner_margin!==undefined ? (listingDetailData.owner_margin*100).toFixed(2)+'%' : '-' }}
{{ listingDetailData.pan_margin!==null && listingDetailData.pan_margin!==undefined ? (listingDetailData.pan_margin*100).toFixed(2)+'%' : '-' }}
{{ listingDetailData.shop_margin!==null && listingDetailData.shop_margin!==undefined ? (listingDetailData.shop_margin*100).toFixed(2)+'%' : '-' }}
{{ listingDetailData.operator || '-' }}
{{ listingDetailData.remark || '-' }}
关闭
¥{{ Number(row.cost_price||0).toFixed(2) }}
¥{{ Number(row.pan_price||0).toFixed(2) }}
¥{{ Number(row.sale_price||0).toFixed(2) }}
¥{{ Number(row.owner_profit||0).toFixed(2) }}
¥{{ Number(row.pan_profit||0).toFixed(2) }}
¥{{ Number(row.shop_profit||0).toFixed(2) }}
{{ (row.owner_margin*100).toFixed(2) }}%-
{{ (row.pan_margin*100).toFixed(2) }}%-
{{ (row.shop_margin*100).toFixed(2) }}%-
详情
关闭
核算预览(保存后按此口径计算)
¥{{ listingCalc.platform_fee.toFixed(2) }}
¥{{ listingCalc.customs_fee.toFixed(2) }}
¥{{ listingCalc.pan_profit.toFixed(2) }}
¥{{ listingCalc.owner_profit.toFixed(2) }}
¥{{ listingCalc.shop_profit.toFixed(2) }}
{{ listingCalc.owner_margin!==null ? (listingCalc.owner_margin*100).toFixed(2)+'%' : '-' }}
{{ listingCalc.pan_margin!==null ? (listingCalc.pan_margin*100).toFixed(2)+'%' : '-' }}
{{ listingCalc.shop_margin!==null ? (listingCalc.shop_margin*100).toFixed(2)+'%' : '-' }}
取消
保存
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
¥{{ row.total_amount }}
{{ row.status }}
合计: {{ supDrill.items.length }} 张采购单 | 总数量 {{ supDrill.items.reduce((t,x)=>t+Number(x.total_qty||0),0) }} | 总金额 ¥{{ supDrill.items.reduce((t,x)=>t+Number(x.total_amount||0),0).toFixed(2) }}
¥{{ fmt(row.total_amount) }}
{{ row.status }}
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ fmt(row.amount) }}
{{ row.status }}
{{ row.stock }}
¥{{ row.stock_value }}
{{ row.items_detail.map(i => i.drug_name + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ fmt(row.amount) }}
{{ row.status }}
合计: {{ zoneDrill.items.length }} 单 | ¥{{ zoneDrill.items.reduce((t,x)=>t+Number(x.amount||0),0).toFixed(2) }}
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
{{ row.drug_name }}×{{ row.qty }}
¥{{ fmt(row.amount) }}
{{ row.status }}
合计: {{ salesWhDrill.items.length }} 单 | 数量 {{ salesWhDrill.items.reduce((t,x)=>t+Number(x.total_qty||x.qty||0),0) }} | 金额 ¥{{ salesWhDrill.items.reduce((t,x)=>t+Number(x.amount||0),0).toFixed(2) }}
{{ row.drug_name }}
{{ row.type }}
{{ row.stock }}
¥{{ (row.cost_price||0).toFixed(2) }}
¥{{ row.stock_value }}
合计: {{ whDrill.items.length }} 个SKU | 总数量 {{ whDrill.items.reduce((t,x)=>t+Number(x.stock||0),0) }} | 总金额 ¥{{ whDrill.items.reduce((t,x)=>t+Number(x.stock_value||0),0).toFixed(2) }}
{{ revertType==='inbound'
? '选择已入库的采购单,将其退回采购入库:冲回该单增加的库存、删除对应入库记录,采购单状态恢复为「已审批」,可重新入库或编辑。'
: '选择已出库的销售单,将其退回销售处理:回补已扣减的库存、清除物流信息,订单状态恢复为「已审批」,可重新确认出库。' }}
取消
确认退单
{{ row.items_detail.map(i => i.drug_name + (i.spec ? ' ' + i.spec : '') + '×' + i.qty).join(';') }}
{{ row.drug_name }}
¥{{ row.amount.toFixed(2) }}
查看
-
{{ row.status || '待审批' }}
审批
编辑
删除
本周
本月
本季
本年
全部
查询
{{ row.item }}
¥{{ row.amount.toLocaleString('zh-CN',{minimumFractionDigits:2, maximumFractionDigits:2}) }}
统计区间: {{ incomeData.start }} 至 {{ incomeData.end }} | 订单数: {{ incomeData.order_count }}
其他成本明细:{{ k }} ¥{{ v }}
本周
本月
本季
本年
全部
查询
{{ row.item }}
{{ row.amount === null ? '' : 'HKD ' + row.amount.toLocaleString('zh-CN',{minimumFractionDigits:2, maximumFractionDigits:2}) }}
统计区间: {{ cashData.start }} 至 {{ cashData.end }} | 现金流量表基于收付管理数据(多币种已按当日汇率折算港币)
公户管理
私户管理
🏦
期初余额(港币)
HKD {{ fmt(paymentSummaryKpi.openingHkd) }}
📈
总收款(港币)
HKD {{ fmt(paymentSummaryKpi.totalInHkd) }}
📉
总付款(港币)
HKD {{ fmt(paymentSummaryKpi.totalOutHkd) }}
💵
资金净额(港币)
HKD {{ fmt(paymentSummaryKpi.closingHkd) }}
💰
期初余额(人民币)
¥{{ fmt(paymentSummaryKpi.openingHkd) }}
📈
总收款(人民币)
¥{{ fmt(paymentSummaryKpi.totalInHkd) }}
📉
总付款(人民币)
¥{{ fmt(paymentSummaryKpi.totalOutHkd) }}
💵
资金净额(人民币)
¥{{ fmt(paymentSummaryKpi.closingHkd) }}
{{ row.account_type || '公户' }}
{{ row.direction }}
{{ row.account_category || '-' }}
{{ row.amount.toLocaleString('zh-CN', {minimumFractionDigits:2, maximumFractionDigits:2}) }}
{{ row.exchange_rate.toFixed(4) }}
HKD {{ row.amount_hkd.toLocaleString('zh-CN', {minimumFractionDigits:2, maximumFractionDigits:2}) }}
¥{{ row.amount_hkd.toLocaleString('zh-CN', {minimumFractionDigits:2, maximumFractionDigits:2}) }}
编辑
删除
期初余额(港币)
HKD {{ fmt(paymentSummaryKpi.openingHkd) }}
期间收款累计(港币)
HKD {{ fmt(paymentSummaryKpi.totalInHkd) }}
期间付款累计(港币)
HKD {{ fmt(paymentSummaryKpi.totalOutHkd) }}
期末余额(港币)
HKD {{ fmt(paymentSummaryKpi.closingHkd) }}
私户账户余额(含期初)
💙 科嘉支付宝
期初 ¥{{ fmt(privateAccountOpening['科嘉支付宝']) }}
¥{{ fmt(privateAccountBalance['科嘉支付宝']) }}
💚 科嘉微信
期初 ¥{{ fmt(privateAccountOpening['科嘉微信']) }}
¥{{ fmt(privateAccountBalance['科嘉微信']) }}
💛 科嘉银行卡
期初 ¥{{ fmt(privateAccountOpening['科嘉银行卡']) }}
¥{{ fmt(privateAccountBalance['科嘉银行卡']) }}
{{ z.bill_type }}
{{ z.count }} 条 | {{ z.total_qty }} 件
¥{{ fmt(z.total_receivable) }}
¥{{ fmt(row.total_goods_amount) }}
¥{{ fmt(row.total_fees) }}
¥{{ fmt(row.total_deduction) }}
¥{{ fmt(row.total_receivable) }}
应收总计: ¥{{ fmt(billTotalReceivable) }}
¥{{ (row.pan_price||0).toFixed(2) }}
¥{{ (row.goods_amount||0).toFixed(2) }}
¥{{ (row.logistics_fee||0).toFixed(2) }}
¥{{ (row.tax_fee||0).toFixed(2) }}
¥{{ ((row.remote_fee||0)+(row.other_fee||0)).toFixed(2) }}
¥{{ (row.deduction||0).toFixed(2) }}
¥{{ (row.receivable||0).toFixed(2) }}
删
本期汇总
记录数
{{ billSummary.count }}
总数量
{{ billSummary.total_qty }}
货品金额
¥{{ fmt(billSummary.total_goods_amount) }}
各项费用
¥{{ fmt(billSummary.total_fees) }}
核减费用
¥{{ fmt(billSummary.total_deduction) }}
应收合计
¥{{ fmt(billSummary.total_receivable) }}
物流查询配置(快递100官方接口)
保存配置
测试连通性
Logo 管理
💊
上传自定义 Logo 图片(支持 JPG/PNG,2MB 以内)。不上传时显示默认图标。
上传 Logo
恢复默认
当前数据库状态
{{ dbConfig.currentType || '-' }}
{{ dbConfig.connected?'已连接':'未连接' }}
{{ dbConfig.host || '-' }}
{{ dbConfig.database || '-' }}
{{ dbConfig.version || '-' }}
{{ dbConfig.tableCount || 0 }}
数据库配置
SQLite (本地)
MySQL (阿里云RDS)
测试连接
保存配置
初始化 MySQL 表结构
阿里云 RDS 部署指南
1. 购买 RDS 实例:登录阿里云控制台 → 云数据库 RDS → 创建实例,选择 MySQL 8.0,规格推荐 2核4G 起步。
2. 配置白名单:在 RDS 实例「数据安全性 → 白名单设置」中添加本服务器公网 IP。
3. 创建账号和数据库:在「账号管理」中创建管理账号 kejia_admin,在「数据库管理」中创建数据库 kejia_go,授权该账号。
4. 获取连接地址:在「数据库连接」中查看外网地址(需先开通外网访问),形如 rm-xxxx.mysql.rds.aliyuncs.com:3306。
5. 填写并测试:将上述信息填入左上角配置,点击「测试连接」,成功后点击「保存配置」。
6. 初始化表结构:点击「初始化 MySQL 表结构」按钮,系统将自动创建所有业务表。
7. 数据迁移:可使用 DTS(数据传输服务)将本地 SQLite 数据迁移至 RDS。
⚠️ 建议:生产环境请开启 RDS 自动备份,设置每日全量备份,保留 7 天以上。
新增子账号
{{ row.role==='superadmin'?'超级管理员':(row.role==='admin'?'管理员':'子账号') }}
{{ row.status }}
编辑
删除