# 进销存管理系统专业版手册v1.0.0 **Repository Path**: grape-branch/handbook-jxc ## Basic Information - **Project Name**: 进销存管理系统专业版手册v1.0.0 - **Description**: 通用进销存管理系统专业版,是一款专为中小企业设计的基于Web的库存管理解决方案,旨在提高企业的运营效率,实现销售、采购和库存的高效管理。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-14 - **Last Updated**: 2025-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用进销存管理系统专业版v1.0.0 > 通用进销存管理系统专业版,是一款专为中小企业设计的基于Web的库存管理解决方案,旨在提高企业的运营效率,实现销售、采购和库存的高效管理。 自带本地运行环境 nginx1.20.2+php5.4.9+mysql5.5.62 精简最少体积占用,运行最小内存占用(1GB内存,512MB内存照样能跑),兼容老爷机或老服务器,一切大道从简。 ## 简单使用 > 原生手写MVC(兼容PHP5.4+),它简单、易用、轻量,并且易于扩展。 start.bat 一键开启 stop.bat 一键关闭 默认匿名用户,输入验证码直接登录 (匿名用户属于游客角色,只能看,不能增删改和使用上传接口) 用户名 anonymous 密码 123456 管理员用户 (管理员角色开放所有权限) 用户名 admin 密码 admin 管理员用户登录后台 http://localhost/admin/ (或前端点击右上角控制台) 后台点击右上角三个点,点开后,点击重置系统,恢复出厂设置。 ## 系统架构与技术栈 采用Web架构,用户可以通过浏览器访问系统,无需安装客户端,具备跨平台和易用性。系统基于B/S(Browser/Server)模式,前端使用HTML、CSS和JavaScript等技术,后端采用PHP服务器端语言,搭配MySQL数据库管理系统存储数据。 ## 进销存管理模块 1. 权限管理(可设置每个员工对每个模块的增删改查的精确控制) 1.1 员工管理 1.2 角色管理 1.3 权限菜单 2. 入库管理(主要是与供应商之间,采购入库和退给供应商) 2.1 产品入库 2.2 入库记录 2.3 退回供应商 2.4 退回记录 3. 库存管理(可以多仓库之间调拨商品和查看库存预警) 3.1 库存查询 3.2 库存调拨 3.3 调拨记录 3.4 库存报警 4. 出库管理(主要是与顾客之间,销售给顾客和接收顾客退货,支持产品报废功能) 4.1 产品销售 4.2 销售记录 4.3 顾客退货 4.4 退货记录 4.5 产品报废 4.6 报废记录 5. 会员管理(可以跟踪每个会员的购物记录,退货记录,积分兑换礼品的记录,支持会员生日预警与问候) 5.1 添加会员 5.2 会员列表 5.3 会员兑换 5.4 兑换记录 5.5 生日报警 5.6 会员组 6. 供应商管理(可以跟踪每个供应商的进货记录,退货记录) 6.1 添加供应商 6.2 供应商列表 7. 仓库管理(可以管理无限多个仓库) 7.1 添加仓库 7.2 仓库列表 8. 类别管理(支持无限极分类) 8.1 添加分类 8.2 分类列表 9. 计量单位(已内置个、包、盒、瓶、件、箱6个计量单位) 9.1 添加单位 9.2 单位列表 10. 统计报表(统计每个供应商,每个会员) 10.1 进货统计 10.2 销售统计 10.3 退回供应商 10.4 顾客退货 10.5 兑换统计 10.6 调拨统计 10.7 报废统计 10.8 工资统计 11. 账务管理(对收入支出明细记账,已内置13个大类,64个小类) 11.1 添加账务 11.2 账务列表 11.3 账务大类 11.4 账务小类 11.5 银行管理 12. 媒体管理(对上传的附件进行管理,可以计算找出孤立的文件进行删除) 12.1 媒体列表 12.2 上传文件 13. 系统管理(对系统进行基本设置,操作日志是所有的数据增删改操作都记录日志) 13.1 系统设置 13.2 操作日志 14. 恢复出厂(此操作在右上角三个点点开后,有操作权限的管理员点击重置系统恢复系统初始状态,慎用!!!) ## 系统特点 1. 简单易用:界面设计简洁,操作流程直观,即使对计算机不熟悉的员工也能快速上手。 2. 数据安全:采用先进的加密技术和防火墙保护,确保数据在传输和存储过程中的安全。 3. 实时同步:通过Web接口,各个部门能实时查看和更新数据,保证信息的一致性。 4. 扩展性:系统设计时考虑了未来可能的需求变化,易于进行功能扩展和升级。 ## 使用与分享 能够帮助公司实现精细化管理,提高工作效率,减少错误,降低运营成本。例如,通过库存预警,公司可以及时补充货物,避免断货;通过销售数据分析,可以调整销售策略,提升销售额;通过采购管理,可以优化供应商关系,降低成本。 免费下载、建立和使用,没有任何功能限制和使用时长限制。可无限复制,重置系统后又可在新环境中重新使用,欢迎分享,敬请保留 yesu.co 的官网链接。 ## 官网地址 > https://yesu.co/ ## 配置信息 > html/config.php ### 本地调试 > 新建 mvc_jxc 数据库,字符集 utf8 -- UTF-8 Unicode 校对 utf8_unicode_ci 将目录下 mvc_jxc.sql 导入即可。 ```php 'Asia/Shanghai', // 数据库配置信息 'db' => [ 'type' => 'mysql', 'host' => '127.0.0.1', 'dbname' => 'mvc_jxc', 'port' => '3306', 'charset' => 'utf8', 'username' => 'root', 'password' => '', ], // 调试模式 'debug' => true, // 记录操作日志 'log' => false, // 数据库零查询静态缓存周期(秒,0关闭) 'cache' => 0, ``` ### 线上设置 > 根据服务器所在国家设置时区,数据库配置信息,关闭调试模式,打开记录操作日志,启用数据库零查询静态缓存(示例为关闭) ```php 'Asia/Shanghai', // 数据库配置信息 'db' => [ 'type' => 'mysql', 'host' => '127.0.0.1', 'dbname' => 'mvc_jxc', 'port' => '3306', 'charset' => 'utf8', 'username' => 'root', 'password' => '', ], // 调试模式 'debug' => false, // 记录操作日志 'log' => true, // 数据库零查询静态缓存周期(秒,0关闭) 'cache' => 0, ``` ## 注意事项 * 重置系统,恢复出厂设置,删除用户数据,恢复系统到一个初始状态。 * 如果系统破坏,导入数据库`html/mvc_jxc.sql`恢复系统到一个初始状态。 ## mvc 使用命名空间 > PHP版本 5.4+ * config.php 配置文件(如连接数据库等) * index.php 入口文件,可以用 nginx 或者 apache 隐藏入口 * autoload.php 类自动加载器 * mvc.sql 初始化数据库导入 * mvc/ 迷你mvc目录 + Controller.php 基础控制器 + Facade.php 门面静态化 + Model.php 模型类(已门面) + View.php 视图类(已门面) + Util.php 实用工具(已门面) + cache_str/ 单点登录保存串 + tpl/ 模板编译目录 * controller/ 控制器目录 * model/ 模型目录 * view/ 视图目录 * facade/ 门面静态化目录 * static/ 静态文件目录 * util/ 扩展工具目录 ## nginx 隐藏入口重写规则 > nginx.htaccess 1. 根目录 ```shell location / { if (!-e $request_filename){ rewrite ^/(.*)$ /index.php/$1 last; } } ``` 2. 子目录 ```shell location /sub-dir/ { if (!-e $request_filename) { rewrite ^/sub-dir/(.*)$ /sub-dir/index.php/$1 last; } } ``` ## apache 隐藏入口重写规则 > .htaccess 1. 根目录 ```shell RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] ``` 2. 子目录 ```shell RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /sub-dir/index.php [L] ``` ## 初始化系统 ### 1. 重置系统 > 新系统在使用前进行重置,恢复到出厂设置。点击左上角三个点,弹出的菜单中选择【重置系统】恢复到出厂设置 ![image-20251106095921023](assets/image-20251106095921023.png) ![image-20251106100001426](assets/image-20251106100001426.png) ![image-20251106100052153](assets/image-20251106100052153.png) ### 2. 设置系统 > 进行基本设置,比如介绍会员增加积分,smtp邮件设置等,QQ邮箱授权码获取见后页 #### smtp邮箱设置 ![image-20251106100651829](assets/image-20251106100651829.png) ![image-20251106100931558](assets/image-20251106100931558.png) ![image-20251106101056991](assets/image-20251106101056991.png) > 去收件箱,查看,收到一封 Test Email 的邮件,表明smtp邮箱配置成功。 ![image-20251106101348574](assets/image-20251106101348574.png) #### QQ邮箱授权码 > QQ邮箱授权码在QQ邮箱后台获取【设置】-【账号】- **POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务** ![image-20251106102145850](assets/image-20251106102145850.png) ![image-20251106102405327](assets/image-20251106102405327.png) ### 3. 添加角色-权限-员工 > 参考管理员权限,开放所有权限,游客权限,仅仅支持查看,不支持任何增删改和上传权限。根据实际需要分配可使用的菜单功能的操作权限 ![image-20251106103415132](assets/image-20251106103415132.png) ![image-20251106103613062](assets/image-20251106103613062.png) > 如果你不需要游客登陆展示功能,可以在员工管理中禁用。但是管理员是不可禁用的。 ![image-20251106103745163](assets/image-20251106103745163.png) 对员工分配权限操作是非常重要的事项,权限分配不当,会导致系统破坏。因此单开一讲,请参照附录**权限管理精讲** ### 4. 添加会员(可选) > 虽然为可选,但添加会员更加方便对客户进行管理和统计,可以对会员进行分组管理 #### 添加会员组 ![image-20251106104501884](assets/image-20251106104501884.png) #### 添加会员到组 ![image-20251106125227608](assets/image-20251106125227608.png) > 后续添加会员可以选择介绍人,介绍人增加积分,前提是系统设置中已经设置【介绍会员增加积分】,这里设置中为5 ![image-20251106125428426](assets/image-20251106125428426.png) > 这样在会员列表中可以详细的统计会员的购物记录、退货记录、积分兑换礼物的记录等 ![image-20251106125615968](assets/image-20251106125615968.png) ### 5. 添加供应商(可选) > 虽然可选,但添加供应商可以更加方便的统计和管理从供应商的进货记录和退货给供应商的记录等 ![image-20251106125744101](assets/image-20251106125744101.png) ![image-20251106125924744](assets/image-20251106125924744.png) ### 6. 添加仓库(可选) > 你可以添加多个仓库,并设置一个默认仓库 ![image-20251106130009752](assets/image-20251106130009752.png) ![image-20251106130240048](assets/image-20251106130240048.png) ### 7. 添加分类(可选) > 可以更好的对货品进行管理,支持无限极分类 ![image-20251106130337307](assets/image-20251106130337307.png) ### 8. 添加单位(可选) > 系统内置了【箱、件、瓶、盒、包、个】6个计量单位,可以添加更多或删减 ![image-20251106130432768](assets/image-20251106130432768.png) ## 开始使用系统 ### 入库管理 #### 产品入库 > 首次入库使用新产品入库,之后同样产品可以快速使用已有产品入库,并可以选择不同的供应商。 - 新产品入库 ![image-20251106131348563](assets/image-20251106131348563.png) > 与基础版不同的是,专业版支持批量入库,依次【添加栏目】,支持多个产品批量入库,图示为三个产品一次入库 ![image-20251106132536916](assets/image-20251106132536916.png) > 选择好供应商,然后单击【确定添加】 ![image-20251106132735169](assets/image-20251106132735169.png) - 已有产品入库 > 我们添加两个栏目,选择已有产品2、产品3,进行批量入库 ![image-20251106133549609](assets/image-20251106133549609.png) ![image-20251106133712050](assets/image-20251106133712050.png) #### 入库记录 > 查看批量或单次入库的记录以及点击编号查看或打印【商品入库单RHD】 ![image-20251106134053066](assets/image-20251106134053066.png) ![image-20251106134124029](assets/image-20251106134124029.png) > 点击上方【打印】直接打印这一批次的入库单,方便存档 ![image-20251106134344647](assets/image-20251106134344647.png) #### 退回供应商 ![image-20251106134556304](assets/image-20251106134556304.png) ![image-20251106134751448](assets/image-20251106134751448.png) ![image-20251106134833773](assets/image-20251106134833773.png) #### 退回记录 > 查看退货给供应商的记录以及点击编号查看或打印【商品退回供应商的出库单TGD】 ![image-20251106134952258](assets/image-20251106134952258.png) ![image-20251106135052888](assets/image-20251106135052888.png) ### 库存管理 #### 库存查询 ![image-20251106135344715](assets/image-20251106135344715.png) #### 库存调拨 ![image-20251106135811539](assets/image-20251106135811539.png) ![image-20251106135852549](assets/image-20251106135852549.png) > 再添加一个栏目,批量调拨入库到仓库2 ![image-20251106140036957](assets/image-20251106140036957.png) ![image-20251106140114352](assets/image-20251106140114352.png) #### 调拨记录 > 查看库存调拨记录以及点击编号查看或打印【商品库存调拨单DBD】 ![image-20251106153558041](assets/image-20251106153558041.png) ![image-20251106153740807](assets/image-20251106153740807.png) #### 库存报警 > 低于产品入库时设置的库存报警数量时会产生库存不足的报警,请及时补充库存产品。 ![image-20251106153845508](assets/image-20251106153845508.png) ### 出库管理 #### 产品销售 > 我们将仓库2的产品A2和默认仓库的产品A2批量销售卖给会员TEST ![image-20251106154535900](assets/image-20251106154535900.png) ![image-20251106154727939](assets/image-20251106154727939.png) ![image-20251106154945931](assets/image-20251106154945931.png) ![image-20251106155018212](assets/image-20251106155018212.png) #### 销售记录 > 查看销售记录以及点击编号查看或打印【商品销售出库单CKD】 ![image-20251106155237055](assets/image-20251106155237055.png) ![image-20251106155408720](assets/image-20251106155408720.png) #### 顾客退货 ![image-20251106155637991](assets/image-20251106155637991.png) ![image-20251106155722397](assets/image-20251106155722397.png) #### 退货记录 > 查看顾客退货记录以及点击编号查看或打印【顾客退货单THD】 ![image-20251106171148059](assets/image-20251106171148059.png) ![image-20251106184800478](assets/image-20251106184800478.png) #### 产品报废 ![image-20251106184950458](assets/image-20251106184950458.png) #### 报废记录 > 查看产品报废记录以及点击编号查看或打印【商品报废单BFD】 ![image-20251106185128223](assets/image-20251106185128223.png) ![image-20251106185148620](assets/image-20251106185148620.png) ### 会员管理 #### 会员列表 > 查看会员列表以及查看该会员的购物记录、退货记录、兑换记录等。 ![image-20251106194325133](assets/image-20251106194325133.png) ##### 购物记录 ![image-20251106194655194](assets/image-20251106194655194.png) > 点击编号查看或打印该会员的购物【商品销售出库单CKD】 ![image-20251106194801832](assets/image-20251106194801832.png) ##### 退货记录 ![image-20251106194842922](assets/image-20251106194842922.png) > 点击编号查看或打印该会员【客户退货单THD】 ![image-20251106194858720](assets/image-20251106194858720.png) #### 会员兑换 ![image-20251106195050645](assets/image-20251106195050645.png) ![image-20251106195116424](assets/image-20251106195116424.png) #### 兑换记录 > 查看会员兑换礼物的记录以及查看或打印【积分兑换商品出库单DHD】 ![image-20251106195258648](assets/image-20251106195258648.png) ![image-20251106195319582](assets/image-20251106195319582.png) #### 生日报警 > 按照【系统管理】-【系统设置】设置的提前天数,产生会员生日报警。设置0不报警。 ![image-20251107084445740](assets/image-20251107084445740.png) > 祝福会员生日后,点击【已问候取消报警】,就不再报警,等到来年按照设置的提前天数触发生日报警。 ![image-20251107090330426](assets/image-20251107090330426.png) ### 供应商管理 #### 供应商列表 > 查看供应商列表,以及查看从该供应商的进货记录、退回给供应商的记录等 ![image-20251107090704930](assets/image-20251107090704930.png) ##### 进货记录 ![image-20251107090920585](assets/image-20251107090920585.png) > 点击编号查看或打印从该供应商的进货【商品入库单RKD】 ![image-20251107091129106](assets/image-20251107091129106.png) ##### 退回记录 ![image-20251107091205788](assets/image-20251107091205788.png) > 点击编号查看或打印【商品退回供应商出库单TGD】 ![image-20251107091322511](assets/image-20251107091322511.png) ### 仓库管理 #### 仓库列表 > 添加多个仓库后,点击任何一个仓库设置默认仓库,状态为 ON,同时其它仓库【默认仓库】状态自动为 OFF。 ![image-20251107091551316](assets/image-20251107091551316.png) ### 统计报表 #### 进货统计 > 查看进货统计报表以及查看或打印【商品入库单RKD】 ![image-20251107094357614](assets/image-20251107094357614.png) ![image-20251107094419987](assets/image-20251107094419987.png) #### 销售统计 > 查看销售统计报表以及查看或打印【商品销售出库单CKD】 ![image-20251107094439982](assets/image-20251107094439982.png) ![image-20251107094451466](assets/image-20251107094451466.png) #### 退回供应商 > 查看退货给供应商的统计报表以及查看或打印【商品退回供应商出库单TGD】 ![image-20251107094509780](assets/image-20251107094509780.png) ![image-20251107094522800](assets/image-20251107094522800.png) #### 顾客退货 > 查看顾客退货的统计报表以及查看或打印【客户退货单THD】 ![image-20251107094537748](assets/image-20251107094537748.png) ![image-20251107094555762](assets/image-20251107094555762.png) #### 兑换统计 > 查看会员兑换礼物的统计报表以及查看或打印【积分兑换商品出库单DHD】 ![image-20251107094615060](assets/image-20251107094615060.png) ![image-20251107094625800](assets/image-20251107094625800.png) #### 调拨统计 > 查看多个仓库直接物资调拨的统计报表以及查看或打印【商品库存调拨单DBD】 ![image-20251107094645289](assets/image-20251107094645289.png) ![image-20251107094656701](assets/image-20251107094656701.png) #### 报废统计 > 查看商品报废的统计报表以及查看或打印【商品报废单BFD】 ![image-20251107094718667](assets/image-20251107094718667.png) ![image-20251107094731988](assets/image-20251107094731988.png) #### 工资统计 > 查看员工的销售业绩工资报表,合计工资 = 基本工资 + 销售提成 + 退货负提成 ![image-20251107094919912](assets/image-20251107094919912.png) ### 账务管理 > 账务管理基础版是没有的,专业版内置账务系统,内置账务管理13个大类,64个账务小类,你可以根据需要进行增删改。 ![image-20251107095522353](assets/image-20251107095522353.png) ![image-20251107095545021](assets/image-20251107095545021.png) #### 添加账务 > 我们分别添加一个收入和支出账务,收入100,支出50。 ![image-20251107100235079](assets/image-20251107100235079.png) ![image-20251107100445373](assets/image-20251107100445373.png) #### 账务列表 ![image-20251107102355019](assets/image-20251107102355019.png) #### 银行管理 ![image-20251107102802760](assets/image-20251107102802760.png) ![image-20251107102909101](assets/image-20251107102909101.png) > 添加银行后,添加账务可以选择银行了,自动选中默认的银行。 ![image-20251107103243127](assets/image-20251107103243127.png) ![image-20251107104125567](assets/image-20251107104125567.png) ### 媒体管理 #### 媒体列表 > 所有上传的媒体文件列表。允许的上传类型,可以在【系统管理】-【系统设置】-【上传类型】中设置。 ![image-20251107125900269](assets/image-20251107125900269.png) > 刚上传的附件是未被引用的孤立文件。也可以点击【计算孤立文件】让系统重新标记哪些已使用,哪些未使用。 ![image-20251107130520684](assets/image-20251107130520684.png) #### 上传文件 > 批量上传多个文件,上传前可以预览或增删,最后确定批量上传。 ![image-20251107130810563](assets/image-20251107130810563.png) ![image-20251107130920143](assets/image-20251107130920143.png) ![image-20251107130951357](assets/image-20251107130951357.png) > 在媒体列表可以看到刚上传的图片,未使用的孤立文件可以重命名或删除 ![image-20251107131124121](assets/image-20251107131124121.png) ### 系统管理 #### 操作日志 > 执行的每一次产生增删改和上传的操作,都详细记录日志,方便对每一次的操作进行历史追查。 ![image-20251107132020887](assets/image-20251107132020887.png) ## 二开注意事项 > 你可以对系统进行二次开发,如果你有一点点关于php和mysql的基础知识,再熟悉一点smarty模板语法。二开也是非常容易的。下面是二开步骤。 ### 1. 定义路由 > 浏览器通过地址 /admin/produit/produit_add.html 访问时,这段地址称为路由,程序根据这个路由进行响应,就是控制器和方法,控制器通常是一个类文件的名称,文件中的使用命名空间的类名和文件名相同,根目录 config.php 中定义后端路由,格式: '路由' => '控制器名/方法名' ![image-20251111075152185](assets/image-20251111075152185.png) > 例如:以 config.php 中的 admin 模块,入库管理的`'路由' => '控制器名/方法名'` ![image-20251110200445334](assets/image-20251110200445334.png) ### 2. 控制器类 ![image-20251110200830138](assets/image-20251110200830138.png) ### 3. 编写方法 > 找到 /controller/admin/Produit.php 查看入库方法 ![image-20251110201730411](assets/image-20251110201730411.png) > 关于二开操作数据库的模型使用和供显示的视图使用,分别参照附录**二开模型使用**和**二开视图使用**。 ### 4. 菜单注册 ![image-20251111080214733](assets/image-20251111080214733.png) ### 5. 分配权限 ![image-20251111080920657](assets/image-20251111080920657.png) 经过上面1-5个步骤,确保: 1. 路由通了,config.php 中定义,否则报404错误 2. 找到控制器类名同名文件,开始按照命名空间,编写类中的方法,以代码来响应路由的动作 3. 在响应路由的动作之前,你需要在权限菜单中注册控制器和方法,否则报功能不存在 4. 给当前登陆的用户分配可以操作的权限【菜单】【显示】【功能】 5. 熟悉模型 Model 操作数据库,熟悉 View 操作视图,可以参见附录 ## 附录:权限管理精讲 > RBAC 是一种基于角色的访问控制(Role-Based Access Control)模型,它根据用户在组织中的角色来管理他们对系统或资源的访问权限。与其直接为用户分配权限,RBAC 的核心是将权限赋予角色,然后将角色分配给用户,从而实现对访问权限的集中管理。这种方法简化了权限管理,提高了效率,并降低了安全风险。 ### 角色管理 > 角色定义:首先,根据用户的职能或职责创建角色,例如“管理员”、“编辑”或“游客”。 > > 权限分配:然后,为这些角色分配特定的权限,如“查看”、“创建”或“删除”等。这里以【游客】角色为例,拆解权限分配。【游客】角色的用户只拥有完成其工作所必需的仅仅支持查看的最低权限,仅仅用于系统展示用,无法操作。当然也可以设置连看都不可看的权限。 ![image-20251110092133345](assets/image-20251110092133345.png) #### 后台首页 ![image-20251110093234896](assets/image-20251110093234896.png) #### 权限管理 ##### 员工管理 ![image-20251110093947588](assets/image-20251110093947588.png) ##### 角色管理 ![image-20251110094634710](assets/image-20251110094634710.png) ##### 权限菜单 ![image-20251110094943493](assets/image-20251110094943493.png) #### 入库管理 ![image-20251110095709042](assets/image-20251110095709042.png) #### 库存管理 ![image-20251110100259189](assets/image-20251110100259189.png) #### 出库管理 ![image-20251110101043679](assets/image-20251110101043679.png) #### 会员管理 ![image-20251110103001227](assets/image-20251110103001227.png) #### 供应商管理 ![image-20251110103921925](assets/image-20251110103921925.png) #### 仓库管理 ![image-20251110104355253](assets/image-20251110104355253.png) #### 类别管理 ![image-20251110125202689](assets/image-20251110125202689.png) #### 计量单位 ![image-20251110125427578](assets/image-20251110125427578.png) #### 统计报表 ![image-20251110130223992](assets/image-20251110130223992.png) #### 账务管理 ![image-20251110131708166](assets/image-20251110131708166.png) #### 媒体管理 ![image-20251110132201649](assets/image-20251110132201649.png) #### 系统管理 ![image-20251110132656726](assets/image-20251110132656726.png) ### 权限菜单 > 对角色分配的权限体现在:有些作为文字菜单出现在左侧区称为【菜单】,有些需要在主体区显示数据比如列表或表单称为【显示】,有些需要执行功能操作比如对数据库执行增删改的动作称为【功能】(通常体现在执行【保存】【更新】【删除】【修改属性】等改动数据库的动作)。 > > **控制器**和**方法**对应一个路由和可以执行的操作,可以是【菜单】【显示】或【功能】。 > > 注意:**显示**或**功能**一定有控制器和方法,对于**菜单**则不一定,若作为**左侧父级菜单**仅起折叠作用,可以没有控制器和方法,否则需要有。 #### 后台首页 #### 权限管理 ##### 员工管理 ![image-20251110145442373](assets/image-20251110145442373.png) ##### 角色管理 ![image-20251110155025366](assets/image-20251110155025366.png) ##### 权限菜单 ![image-20251110155249349](assets/image-20251110155249349.png) #### 入库管理 ![image-20251110170502110](assets/image-20251110170502110.png) #### 库存管理 ![image-20251110170940219](assets/image-20251110170940219.png) #### 出库管理 ![image-20251110171617282](assets/image-20251110171617282.png) #### 会员管理 ![image-20251110172158523](assets/image-20251110172158523.png) ![image-20251110172549612](assets/image-20251110172549612.png) #### 供应商管理 ![image-20251110172920798](assets/image-20251110172920798.png) #### 仓库管理 ![image-20251110173231665](assets/image-20251110173231665.png) #### 类别管理 ![image-20251110191732715](assets/image-20251110191732715.png) #### 计量单位 ![image-20251110191928153](assets/image-20251110191928153.png) #### 统计报表 ![image-20251110192522561](assets/image-20251110192522561.png) #### 账务管理 ![image-20251110193016621](assets/image-20251110193016621.png) ![image-20251110193326187](assets/image-20251110193326187.png) #### 媒体管理 ![image-20251110193802714](assets/image-20251110193802714.png) #### 系统管理 ![image-20251110194013469](assets/image-20251110194013469.png) ### 员工管理 > 用户分配:最后,将一个或多个角色分配给用户。当用户被分配一个角色时,他们将自动获得该角色所拥有的所有权限。 ![image-20251110194147921](assets/image-20251110194147921.png) ![image-20251110194359058](assets/image-20251110194359058.png) ## 附录:二开模型使用 > 模型主要用于操作数据库,查询保留mysql原生查询,新增和更新比原生更简洁,删除支持批量删除。 ### 1. 查询记录 ```php // 查询一个字段 $count = Model::fetchColumn("SELECT COUNT(*) FROM `test` ORDER BY `id` DESC"); // 查询一条记录 $row = Model::fetch("SELECT * FROM `test` WHERE `id`=:id", [':id' => 1]); // 查询多条记录 $rows = Model::fetchAll("SELECT * FROM `test` ORDER BY `id` DESC LIMIT 0, 10"); // 查询后按id字段值为键值进行重组 $rows = Model::fetchAll("SELECT * FROM `test` WHERE `id` IN (1, 2)", [], 'id'); ``` ### 2. 新增记录 ```php // 返回最后插入记录的ID $lastInsertId = Model::insert('test', ['title' => 'TEST', 'content' => '']); ``` ### 3. 更新记录 ```php // 返回变动记录的数量 $rowCount = Model::update('test', ['title' => '', 'content' => 'TEST'], ['id' => 1]); ``` ### 4. 删除记录 ```php // 删除一条记录,返回删除的记录数 $rowCount = Model::delete('test', ['id' => 1]); // 批量删除记录,返回删除的记录数 $rowCount = Model::delete('test', ['id' => [1, 2]]); ``` ### 5. 执行mysql语句 ```php Model::exec("ALTER TABLE `test` AUTO_INCREMENT = 1"); ``` ### 6. 提交事务 > mysql语句执行错误时进行回滚,而不写入数据库。通常用于需要执行多条语句且都不可出错的安全写入数据库的场合。 ```php // 开始事务 Model::beginTransaction(); // 错误捕获 try { // 下面三条语句任一执行错误,都不会写入数据库 Model::exec("DELETE FROM `test`"); Model::exec("ALTER TABLE `test` AUTO_INCREMENT = 1"); Model::exec("INSERT INTO `test` VALUES ('1', 'title', '')"); // 提交事务 Model::commit(); // 操作成功 exit(json_encode(['code' => 0, 'msg' => '操作成功!'])); } catch (\Exception $e) { // 错误回滚 Model::rollBack(); // 操作失败 exit(json_encode(['code' => 1, 'msg' => '操作失败!'])); } ``` ## 附录:二开视图使用 > 视图主要用于显示页面,实际上它是 smarty 模板引擎去掉冗余后精简化的单文件版本,仅仅保留大部分常用功能。 - 模板赋值 > 控制器类中通过指定 `View::assign('变量', '值');` 或者 `View::assign(['变量1' => '值1', '变量2' => '值2', ...])` - 使用模板 > 控制器类中通过 `View::display('模板路径');` 来指定,可以通过 `View::fetch('模板路径')` 获取解析后模板内容。 ### 1. 标签单元 > 在模板中,用 `{`开头,以`}` 结尾就构成一个标签单元,{紧接着的单词就是标签名。在标签单元中单词前含$(美元符)的为变量名。 #### 代码注释 ``` {* 这是注释 *} ``` #### 资源引用 ##### res 标签 ``` {* 引用 /static/res/ 下资源 *} ``` ##### include 标签 ``` {* 引入头部文件 *} {include file='admin/header.html'} ``` ##### literal 标签 > 模板引擎不分析 {literal}{/literal} 标签中内容,而直接显示,用于显示有可能包含大括号等字符信息的 javascript 脚本 ``` {literal} {/literal} ``` ### 2. 模板变量 #### 预定义变量 | 模板变量 | 对应的PHP代码 | | --------------- | --------------- | | $smarty.now | time() | | $smarty.get | $_GET | | $smarty.post | $_POST | | $smarty.cookies | $_COOKIE | | $smarty.env | $_ENV | | $smarty.server | $_SEVER | | $smarty.request | $_REQUEST | | $smarty.session | $_SESSION | | $smarty.const | define 定义变量 | ```html {$smarty.const.IA_ROOT} ``` #### 自定义变量 > 控制器中通过 View::assign 赋值的变量,模板中可以直接使用,也可以在模板中赋值(但只能简单赋值数字或字符串),在模板中现用。 - 控制器中使用 > View::assign('a', '123'); > > View::assgin('b', [1,2,3]); > > Veiw::assign(['x' => 1, 'y' => 2]); - 模板中使用 ``` {assign var='a' value='123'} {* 输出 0 *} {$a} {* 下面数组无效,将视为字符串 '[1,2,3]' *} {assign var='b' value=[1,2,3]} ``` #### 变量修饰器 ##### escape 编码器 > 功能:提供各种编码功能 > 参数:可选参数html、url、quotes、input、editor,缺省为html > html:分别替换变量中的如下字符&<>"为其html实体代码,用于按原样输出html源代码; > url:如果该变量用于储存url地址,需要进行url编码; > quotes:在单双引号字符前添加反斜杠; > input:给输入框赋值时使用; > editor:当显示通过文本编辑器录入的内容,需要用此参数; ``` {$a|escape:input} ``` ##### nl2br 换行符转 br > 功能:将换行符替换成
``` {$a|nl2br} ``` ##### default 默认值 > 功能:为变量设置一个默认值,当变量为空或者未分配的时候,将由默认值替代输出 ``` {$a|default:'1'} ``` ##### truncate 字符串截取 > 功能:字符串截取。从字符串开始处截取某长度的字符。默认会在末尾追加省略号。 ``` {$a|truncate:20:'...'} ``` ##### strip_tags 去除标签 > 功能:去除<和>标签,包括在<和>之间的任何内容。 ``` {$a|strip_tags} ``` ##### price 格式化价格 > 功能:格式化价格。 ``` {$a|price} ``` ##### date 日期格式化 > 功能:格式化本地时间和日期。 ``` {$smarty.now|date:Y-m-d H:i:s} ``` ##### modifier 自定义修饰器 > 功能:调用php自定义函数。 > 格式:{$var|modifier:user_func} 注意:通常 user_func 后面跟若干参数,而不是要处理的数据。但是也可能会出现要处理的数据处于参数的位置或者第n个位置。因此对 modifier 函数进行了改写。用于自动判断函数接收要处理数据的位置,要么在最前(默认方式),要么在最后位置,其它属于传入函数的参数。 ![image-20251112131628888](assets/image-20251112131628888.png) 这样能处理大多数 php 原生函数在模板中的调用,并且要处理的数据可以不在第一位置。 ``` {$a|modifier:str_replace('"', '')} ``` ##### 复合修饰器 > 修饰器支持多次引用,但是需注意,传入参数只能是数字或字符串,正则表达式字符串参数中的 `\` 要用 `\\` 替换 ``` {$a|strip_tags|modifier:str_replace('"', '')|modifier:preg_replace('/\\s+/sim', ' ')|modifier:mb_strimwidth(0, 140, '...', 'UTF-8')} ``` ### 3. 流程控制 #### 条件判断 if > 条件判断(if,elseif,else): > > 模板中的 if 语句和 php 中的 if 语句一样灵活易用,if 必须与 /if 成对出现,可以使用 else 和 elseif 子句。 > 多个条件之间用 and、or、&&、|| 连接,实现简单的逻辑运算。 ``` {if $a < 0} 小于零 {elseif ($a > -2 && $a < -1)} 大于负2小于-1 {else} 其它 {/if} ``` #### 循环遍历 foreach > 数组遍历(foreach,foreachelse): > > foreach 用于处理简单数组(数组中的元素的类型一致)。 > foreach 必须和 /foreach 成对使用,且必须指定 from 和 item 属性。 > foreach 可以嵌套,但必须保证嵌套中的 foreach 名称唯一。 > foreachelse 语句在 from 变量没有值的时候被执行。 > from 属性:指定被循环的数组,数组长度决定了循环的次数。 > item 属性:单个循环项目的变量名,在循环内部使用。 > name:可选属性,可以任意指定(字母、数字和下划线的组合)。 > key:可选属性,单个循环的Key值。 > > name 属性如果指定,foreach循环体内会自动生成如下变量 > $smarty.foreach.foreach_name.index表示本次循环索引,从0开始递增的整数 > $smarty.foreach.foreach_name.iteration表示本次的循环次数,从1开始递增的整数 > $smarty.foreach.foreach_name.first表示是否是第一次循环 > $smarty.foreach.foreach_name.last表示是否是最后一次循环 > $smarty.foreach.foreach_name.show表示是否有数据 > $smarty.foreach.foreach_name.total表示循环总次数,也可在循环体外使用 复杂类型,在控制器中赋值: ```php View::assign('lists', [ ['title' => 'title', 'content' => 'content'], ['title' => 'title2', 'content' => 'content2'] ]); ``` 在视图模板中,使用循环输出列表 ``` {assign var='a' value='a,b,cde'} {* 输出列表并且最后一行不显示
换行 *} {foreach from='$lists' item='item' name='item' key='pos'} key: {$pos} {$item.title}: {$item.content} | 本次循环索引 index: {$smarty.foreach.item.index} | 本次循环次数 iteration: {$smarty.foreach.item.iteration} | 是否第一次循环 first: {if $smarty.foreach.item.first}Yes{else}No{/if} | 是否最后一次循环 last: {if $smarty.foreach.item.last}Yes{else}No{/if} | 是否有数据 show: {if $smarty.foreach.item.show}Yes{else}No{/if} | 循环总次数 total: {$smarty.foreach.item.total} {if !$smarty.foreach.item.last}
{/if} {foreachelse} 列表为空 {/foreach}
在循环外获取循环总次数 total: {$smarty.foreach.item.total} ``` ![image-20251112201549080](assets/image-20251112201549080.png) ## 鸣谢 > 如果你有什么好的意见或建议,欢迎与我联系。你可以在【后台首页】,通过加V或电子邮件找到我。 ![image-20251107165552466](assets/image-20251107165552466.png) ![image-20251107165909807](assets/image-20251107165909807.png) 感谢使用!