使用与测试指南

怎么用、怎么测,都在这一页。不用再找文件。

最后更新 2026-09-19 · 手机端 0.5.0(第 10 版)· 新增商品到期日

开始之前

三个地址、两种角色,记不住就回这儿看

网页后台(电脑)
手机端下载
这份指南
jxc.veendev.top/guide/
角色看得到什么
老板全部,含进价、成本、毛利、参数设置、作废
店员不含进价、成本、毛利;改不了参数,也不能作废
这一页在公网上,任何人都能打开,所以不写任何账号和密码。 你的手机号和初始密码由开店的人私下给你。网页后台和手机 APP 都不预填账号, 密码更是每次手动输,不做自动填充。连续输错会锁定一段时间。 拿到之后第一件事:右上角「改密码」,把密码改成只有你知道的。
店员看不到成本这件事是在服务器上做的,不是界面藏起来。用店员账号登录, 接口返回的数据里根本没有那几个字段。

网页后台和手机端用的是同一套数据。手机上开的单,刷新网页后台就能看到; 网页后台改的价格,手机同步之后就生效。

第一件事:改密码。右上角「改密码」,填原密码和新密码。 改完之后这个账号就只有你知道密码了——系统交到你手里,密码就该归你。 手机端在「⋮ → 关于」里也能改。

网页后台 · 电脑

七个标签页。老板管资料、看账、改参数;收银也能用,但手机更顺手

收银开单

条码框里扫码或手输后回车,商品和价格自动出来,点「确认成交」。

为什么未知码不能卡住:收银高峰期后面排着人,店员不可能停下来建档。 卡一次,他第二天就改用计算器了,这一单永远不会进系统。 同理,条码磨花了扫不出来、或者压根就是散装货的时候,得能直接打名字, 否则这一单照样进不来。「进货」「退货」两页的框也一样能打名字。
「最近的单」点一行就能看这张单买了什么——商品、数量、单价、金额, 老板还能看到成本和毛利。一次买好几样时,光看单号和金额没法核对是哪一单。 收银、进货、退货、盘点四个页面都一样。
时间统一显示「年-月-日 时:分:秒」。

进货入库

扫码后会问这次的进价,填完加入,点「确认入库」。扫整箱码就按箱入库。

店员可以录进价并确认入库(老板不在店里时进货不能卡住),但确认后再查这张单, 进价和金额都看不到了。

商品与待完善

用扫码枪录商品最快:光标点进「全部商品」的搜索框,直接扫。 本店有这个货就搜出来,没有就出现「用条码 xxx 新建商品」—— 点一下条码自动填进新建表单,光标落在商品名上,接着打名字和价格就行。
扫码枪走的是键盘模式(条码当键盘敲进光标所在的框 + 回车),插上就能用,不用装驱动。

新建商品

填名称、规格、单位、售价、进价、条码即可。如果这个货按箱卖, 再填「一箱几个」「整箱码」「整箱价」三项,系统就会自动做箱瓶换算。

待完善商品

扫到未知码先卖出去的,都会落在这里。点「补全」,一个弹窗里填名字、规格、进价、售价, 之前那几单的成本会自动补上。

收银时如果随手记了备注,会挂在商品名后面(像 待完善商品 075800·绿色包装的辣条),一眼能认出是哪个。

下架 / 停售

不卖了的货,点那一行的「下架」。下架不是删除:库存、历史单据、账实核对全都留着, 商品也还在这个列表里,只是标成「已下架」并且变灰。

下架之后只有两件事做不了:再开销售单、再进货。 退货、盘点、作废都照常——下架之后正好要把剩货退给供货商或者盘掉, 顾客也还可能拿以前买的货来退;开错的旧单也还得能作废。
收银台按名字搜货时,下架的不会出现在候选里;扫它的码会明说「已经下架了」。 手机端同样管用,而且离线也认。
想重新卖就点「重新上架」,随时可逆。
待完善商品不给直接下架。它之前那几单的成本还是 0,下架了就再没人回填—— 先点「补全」把名字和进价填上,成本落到实处,再决定要不要下架。

改商品资料

每一行右边的「改资料」,一个弹窗改完名称、规格、单位、售价、进价、条码、整箱设置。 改资料不动库存——库存只能走进货、退货、盘点,这条没有例外。

没有条码的货怎么办(散装、称重、自制):两条路,按你的店选。
① 什么都不填,收银时打商品名搜。散装瓜子现在就是这样。
② 给它编一个店内码,打印小标签贴在货架或价签上,以后照常扫。 店内码用 2 开头的 13 位数(20–29 是国际上留给店内自用的段, 不会和厂家条码撞),比如 2000000000018。在「改资料」的条码框里填上就行。
货多、翻台快的店建议走 ②,扫码比打字快得多。
两条改不了的:一个包装一旦开过单,「一箱几个」就锁死了,也不能取消整箱—— 历史单据上写着「1 箱 = 12 袋」,改成 24 之后那些单就解释不了了,账实核对会当成差异报出来。 装箱规格真变了,建一个新商品。
改进价只是改下次进货的参考价,不会动已成交单据的成本。 成本是成交那一刻的快照,事后改它等于改已经发生的账。

商品名下面显示的是它的条码,右边小图标点一下就复制走。 按箱卖的商品会显示两个码,前面标着是哪个包装的(袋 6901028075831、箱 16901028075838); 散装这类没有条码的显示「无条码」。

每一行右边还有个「提醒设置」,可以单独给这个商品设补货点,不影响别的商品。

初始库存

系统上线不需要停业盘点。哪个货卖到了或进到了,就在这一页填一次「现在实际还剩多少」, 填完这个货就不再问。两周左右自然就补齐了。

这么设计是因为:任何「必须先做完 X 才能开始用」的要求,都会把上线卡死。 所以把它拆散进日常流程。

退货

顾客退货走这一页。填了原销售单号,成本就按当时那一单算;不填也能退,按当前平均成本算。

为什么要分:如果中间又进了一批更贵的货,平均成本被抬高了。退回来的这一件 必须按当时卖出去的成本记,否则以前算过的毛利会自己变。

盘点

只填「实际数了多少」,差异系统自己算,边填边显示。选好原因(盘点、报损、试吃、自用), 点「生成盈亏单」。

盘点差异也必须生成单据。系统里没有任何一条路径能直接改库存数字—— 这是整个账目正确性的地基,破一次就退回黑盒子了。

作废

开错了单,在各个单据列表右边点「作废」。

两张单都留着,是因为月底扎账时你应该看到「开错一张、冲掉一张」, 而不是凭空少一张单。单据丢失正是这个项目要解决的问题本身。

今日经营与对账

营业额、成交单数、退款人人可见;今天赚了多少、进货花了多少只有老板能看到。

对账卡片会显示上次自动对账的时间和结论——每天凌晨 02:30 自动跑一次,不用你记得点。 也可以随时手动点「立即对账」。

对账校验的是「期初 + 期初调整 + 入库 − 出库 = 期末」,数量和成本两列同时对。 它只报差异、不自动改数:对不上就是事故,必须人工找原因。自动修复等于把 bug 洗白。

参数设置

所有阈值都在这一页,代码里没有写死任何一个业务数字。

改哪一层在哪改效果
全店「参数」页直接改,点保存没单独设过的商品都跟着变
单个商品「商品」页那一行点「提醒设置」只影响这个商品;留空则恢复跟随全店

「来源」那一列会告诉你当前值是全店设的、商品单独设的还是系统默认。 「恢复默认」是把这一层的设置删掉、回到继承上一层,不是填一个空值。

手机 APP · 安卓

收银的主力形态。手机和 PDA 装的是同一个包,不用做两套

安装

手机浏览器打开 jxc.veendev.top/app/,页面上有下载按钮和二维码。 网页后台的登录页和右上角也都有「手机端」入口。

这是自己编的包、没上应用商店,所以系统会拦一下:

登录与同步

第一次登录必须联网,它会把商品资料下载到手机里。右上角出现绿点「已同步」就好了。

右上角意思
● 已同步都传上去了,没有积压
● 离线 · N 单待传连不上服务器,单据存在手机里,联网会自动补传
● N 单待传网络通但还在传,等几秒
● N 单被退回服务器明确拒绝了某单,需要人看一眼

旁边的同步按钮可以手动催一次。「今日」页底部还有个「立刻重新同步全部商品资料」, 在网页后台新建了商品、手机上却搜不到时点它。

收银与进货

底部三个标签:收银、进货、今日。

退货

在收银页右上角的「退货」。顾客站在柜台前要退货时,店员人正好就在收银页。

两种退法,看手上有没有小票:

  1. 有小票,按单号退。填上原销售单号,点「查这张单」, 顾客当时买的每一样都会列出来:买了几个、单价多少、已经退过几个、还能退几个。 点某一行的「退」,填个数量就加进这一单——不用对着小票重新扫一遍。
    手机上敲 XS202609180001 太难,旁边还有「最近」, 从这台手机开过的单里直接挑。
  2. 没小票,直接扫码退。单号留空,扫要退的货(或打商品名)就行。 这时按当前平均成本回库。
填了单号就按原单成本回库。中间要是又进了一批更贵的货,平均成本被抬高了, 退回来这件必须按当初卖出去的成本算,否则毛利会凭空变化。
带原单退货受原单约束,这是为了不让钱和库存凭空多出来:
· 退不了比买的多,已经退过的会自动扣掉(「还能退」那一列就是余额)
· 退这张单上没有的商品会被拦住,提示可能是拿错了单号
· 原单已作废的,那张单上的货不能再退
· 退货单作废之后,那笔货可以再退一次——作废等于这笔退货没发生过

商品(手机上改)

底部第三个标签。不用再回电脑改商品了——新货到了、价格调了、条码贴错了, 人站在货架前当场改完。

这一页需要联网,和收银、进货不一样,断网时会明说。 原因是商品资料离线改会冲突:两个人离线各改同一个商品,重新联网时没法判断谁对。 判断标准是——卖货不能等,改商品可以等两分钟。
断网时真正需要的那条路已经有了:扫到没见过的码先按成交价卖掉、记一句备注, 联网后在「待完善」里补全,成本自动回填。
店员和老板看到的不一样:店员看得到商品和库存,但看不到进价成本, 也改不了资料、不能下架、没有「新建商品」按钮。这是服务端在挡,不是前端藏起来。

升级(应用内)

不用再来网页下载了。右上角「⋮」→「关于 / 检查更新」, 有新版本时那个图标上会自己挂一个小红点,进去点「下载并升级」就行。

系统会拦两道,都是安卓的规矩,不是出错了:
① 「不允许安装未知应用」——点「设置」,把「进销存」那个开关打开, 返回再点一次「下载并升级」(包已经下好了,不用重下)。这一步每台手机只需要做一次。
② Play Protect「App scan recommended」(部分手机有)—— 展开「More details」,选「Install without scanning」。 不用把安装包传给 Google。
然后系统问「要更新这个应用吗」,点「更新」,十几秒就好。

离线怎么工作

这个 APP 没有「离线模式」开关。所有读写本来就走手机本地, 联网只是把待传队列往上推。所以断网时一点都不卡。

「今日」页最上面那张卡是这台手机今天开的单,断网也有数看;下面那张是 整店今日,来自服务器,联网才有。两个数分开给,不含糊。

测试总览

按版本分三组。每组十来分钟,照着做就行

版本在哪测测什么状态
第一版电脑网页主链路:建档、扫码、开单、减库存、当日营业额已通过
第二版电脑网页参数配置、退货、盘点、作废、自动对账与备份待测
安卓端首版手机离线开单、自动补传、本地条码字典、摄像头扫码待测
测试数据不用管,我不会清库。真要重来我会先问你。

第一版 · 网页主链路

在电脑上打开 网页后台,用老板账号。约十分钟

1

扫码卖一瓶水

进「收银」,条码框输 6921168509256 回车,加入后点「确认成交」。

要看的:出单号、金额 2.00。这是主链路最短的一条。
2

扫整箱码,验证箱瓶换算

进「进货」,条码输 16921168509253(同一商品的整箱码),数量 1,进价填 28.80,确认入库。

要看的:「今日 → 当前库存」里矿泉水加了 24 瓶,不是 1 件。成本单价自动算成 1.20。
这是最容易埋雷的地方。不做换算,进一箱只加一件,账第一周就乱了。
3

扫一个没见过的码

回「收银」,条码随便输一串,比如 6999999999999,回车。

要看的:系统不拦你,输个成交价就能继续卖,这一单照常出单号。
这条是收银高峰期的生死线。扫到未知码就卡住的话,店员第二天就不用了。
4

事后补全那个商品

进「商品 → 待完善商品」,点「补全」,填名字、进价、售价。

要看的:补全后,刚才那一单的成本会自动回填,今日毛利跟着变。
5

补录初始库存

进「初始库存」,填一个「现在实际还剩多少」,点记下。

要看的:填完这个货就从列表里消失,不再问。
6

看今天赚了多少,然后换店员账号

进「今日」,老板能看到营业额、单数、今天赚了多少、进货花了多少。 退出,换店员账号登录,再看同一个页面。

要看的:进价、成本、毛利全部消失。「商品」页也没有「提醒设置」了。
7

对账

「今日 → 对账 → 立即对账」。

要看的:账实一致。数量和成本两列同时对得上。
8

看一眼参数

进「参数」页。

要看的:所有阈值都在这儿,来自配置表而不是写死在代码里。

第二版 · 参数与退货盘点作废

电脑网页,老板账号。约十五分钟。第一版验的是「能开门做生意」,这一版验的是出了岔子怎么办

09-17 已修与已改: 「提醒设置」点了没反应已修(那段代码被我写进了另一个函数里,按钮找不到它)。 另外按你的三条反馈改了:商品名下面现在显示条码、右边小图标点一下就复制; 收银扫到未录入商品时,成交价和备注在同一个弹窗里填;补全商品也是一个弹窗填完四项。 全站不再用浏览器自带的弹窗——它一次只能问一个字段,而且被浏览器拦掉时会毫无提示。 (下面「开测前的账面」是这轮开测时的数,你已经测过几步了,对不上很正常,以「今日」页的实时数为准。)

开测前的账面(照着对数)

商品库存成本单价
康师傅红烧牛肉面 袋装103.20
可口可乐 330ml102.10
散装瓜子108.50
农夫山泉饮用天然水 550ml321.24
摇摇乐91.00

今日经营:营业额 6.00,成交 3 单,退款 0,今天赚了 5.00,进货花了 28.00。

1

改一个全店参数

进「参数」页,把补货点从 3 改成 8,保存。再点「恢复默认」。

要看的:「来源」列从「系统默认」变成「全店设的」,旁边多出「恢复默认」; 点了之后值回到 3,来源变回「系统默认」。
「恢复默认」是把这一层的记录删掉、回到继承上一层,不是写一个空值。
2

只给一个商品单独设

进「商品」页,找到「可口可乐」,点那一行的「提醒设置」,填 50 确定。 再点一次看它显示什么,然后回「参数」页看全店的补货点。

要看的:商品那儿显示「现在是 50(这个商品单独设的)」, 全店那儿仍然是 3。两边互不干扰。留空确定即可恢复跟随全店。
调某个商品的阈值,应该在看得见这个商品的地方改,不该让你钻多级设置菜单。
3

验证参数真的会生效

「参数」页把「库存不够时是否允许继续卖」改成否,保存。 然后去「收银」扫 6928804011173,数量填 99,确认成交。

要看的:报错「可口可乐 库存不够了」,单没开成。
测完记得改回「是」,否则后面几步会被拦住。
4

店员改不动参数

退出,换店员账号登录,进「参数」页。

要看的:输入框全灰,没有保存按钮;「商品」页也没有「提醒设置」。 这个限制在服务器上,不是前端藏起来。
5

卖一单,然后带原单退一件

换回老板账号。「收银」扫 6928804011173 数量 3 成交,记下单号。 进「退货」页,原销售单号填那个单号,扫同一个码数量 1,确认退货。

要看的:提示「退款 ¥3.00(按原单成本回库)」; 可乐库存 10 − 3 + 1 = 8;「今日」页多了退款 ¥3.00。
6

盘点

进「盘点」页,可口可乐账面显示 8,在「实际数了多少」填 6,原因选「报损」,生成盈亏单。 然后再试一次,这次填 6(和账面一样)。

要看的:第一次差异列立刻显示红色 −2,生成调整单,账面修正到 6; 第二次提示「实盘数和账面一样,没有差异,不用生成单据」,不产生空单。
7

作废

「收银」故意开一单错的:扫 6901028075831 数量 5 成交。 记下当前营业额和库存,然后在「最近的单」里点那单右边的作废。

要看的:那张单变灰标「已作废」但没有消失; 列表里多一张负数金额的「作废单」;方便面库存还原;营业额扣回去了。 再点一次会提示「已经作废过了」;店员账号看不到作废按钮。
8

对账

进「今日」页看「对账」卡片。

要看的:最上面一行显示上次自动对账的时间和结论(每天凌晨 02:30 自动跑); 点「立即对账」手动跑,经过上面一串退货、盘点、作废之后仍然账实一致。
对上了,说明这些操作没有一处绕过单据直接改库存。

顺带说一句:备份

后台每天 03:30 自动导出数据库、本地保留 7 天,我做过一次恢复演练(还原进临时库,恒等式仍成立)。 整机快照也建了基线。

「每天拉回自己电脑」这一层暂时不做(2026-09-17 你定的)。 脚本留在项目里,哪天想要了说一声,注册个每日任务就能接上。
现在是服务器本地每日导出 + 手动整机快照两层。对测试阶段够用; 等真到「朋友的店天天在用」那一步,异地再加一份才有必要。

安卓端首版

在手机上测。约十分钟。先去下载安装

1

扫码卖一瓶水

底部选「收银」,点扫码用摄像头对准条码;没有实物就在条码框手输 6921168509256 回车。

要看的:商品名、单价自动出来。+− 改数量,点「确认成交」。
摄像头扫码是我在模拟器上验不了的一条,麻烦你重点看这个。
2

扫整箱码

条码输 16921168509253。

要看的:提示「按箱计,1箱 = 24 个最小单位」,单价是整箱价 42 元。
3

把手机调成飞行模式,继续开单

打开飞行模式,然后照常扫码、加入、确认成交。

要看的:照样能卖,一点都不卡;右上角变黄点 「离线 · N 单待传」;提示「连不上服务器,单据先存在手机里」。
门店在地下商场、代理商在车上,断网是常态。这条过不了,这个 APP 就没用。
4

关掉飞行模式,什么都别点

等十几二十秒。

要看的:右上角自己变回绿点「已同步」,待传数归零。 去电脑上刷新网页后台的「今日」页,刚才离线开的单都在里面。
5

扫一个没见过的码

随便输一串没见过的码,比如 6999999999888。

要看的:不拦你,输个成交价继续卖。事后在网页后台 「商品 → 待完善商品」里补全。
6

初始库存就地补

如果某个商品还没记过初始库存,成交后会问一句「现在还剩多少」。

要看的:填完这个货就不再问。这一步需要联网,离线时会跳过,下次卖到还会问。
7

进货,然后换老板账号看

底部选「进货」,扫码后填进价,确认入库。然后退出,用老板账号登录同一个 APP。

要看的:店员账号下「今日」页没有成本和毛利; 换成老板就多出「今天赚了」和「进货花了」。
8

双击不会重复扣

确认成交时快速连点两下。

要看的:只出一单。

我已经在模拟器上验过的

项目结果
安装与启动装上、能开、无崩溃
登录与主数据同步成功,右上角绿点「已同步」
本地条码字典手输条码,商品名与价格自动带出,走的是手机本地库
飞行模式下开单照常成交,变黄点「离线 · 1 单待传」
恢复网络自动补传没点任何按钮,二十秒内变回「已同步」,服务端收到那一单
事后对账数量与成本两列恒等,差异 0
摄像头扫码验不了:模拟器没有真摄像头。真机上请重点看第 1 步。

出问题怎么反馈

截图就行,不用整理

演示条码

测试时直接复制

条码商品按什么卖售价
6921168509256农夫山泉饮用天然水 550ml瓶2.00
16921168509253农夫山泉饮用天然水 550ml箱(1 箱 = 24 瓶)42.00
6901028075831康师傅红烧牛肉面 袋装袋4.50
16901028075838康师傅红烧牛肉面 袋装箱(1 箱 = 12 袋)46.00
6928804011173可口可乐 330ml罐3.00
(无条码)散装瓜子斤12.00

随便编一串没见过的码,就能测「未知码不阻塞收银」。

还没做的

说清边界,免得你测到一半找不到

手机 APP 里还没有

  • 退货、盘点、作废(去网页后台)
  • 新建商品(去网页后台;扫到未知码可以先卖)
  • 拍照留档

整个系统还没有

  • 报表:商品排行、进销存汇总、导出 Excel
  • 补货提醒与压货提醒
  • 商品合并的界面(服务端已支持)
  • 小票打印、会员、促销
手机端目前用的是调试签名,够内部装;正式推广前要换成正式密钥。 PDA 扫描头的接入代码已经写好,但没有设备可测。

这一页由 AI 维护,每次交付后同步更新。
设计与开发过程的完整记录在项目文档里,这一页只讲怎么用、怎么测。