# elecselectpro **Repository Path**: wangdaxu/elecselectpro ## Basic Information - **Project Name**: elecselectpro - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-02 - **Last Updated**: 2026-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ElecSelectPro - 电气报价管理系统 基于 FastAdmin + ThinkPHP 5 构建的专业电气设备报价管理系统,提供完整的报价单管理、物料库管理、品牌管理等功能。 ## 项目简介 ElecSelectPro 是一款面向电气设备销售企业的报价管理系统,支持: - **报价单管理**:创建、编辑、复制、导出报价单 - **物料库管理**:分类管理电气设备,支持 Excel 批量导入 - **品牌管理**:管理供应商品牌信息 - **智能计算**:自动计算小计、税额、总计 - **权限控制**:多用户数据隔离 ## 技术栈 | 层级 | 技术 | 版本 | |------|------|------| | 后端框架 | PHP + ThinkPHP 5 | PHP 7.4+ | | 后台框架 | FastAdmin | 1.6.1.20250430 | | 前端框架 | Bootstrap 3 + jQuery | 3.7.1 | | 模块化 | RequireJS (AMD) | - | | 数据库 | MySQL | 5.7+ | | Excel处理 | PhpSpreadsheet | 1.29.1 | ## 功能模块 ### 1. 报价单管理 (Quote) - 创建/编辑/删除/复制报价单 - 自动生成报价单号 (QT+日期+序号) - 客户信息、项目信息管理 - 税率、全局折扣设置 - 状态流转:草稿 → 已发送 → 已接受/已拒绝 - Excel 导出 ### 2. 报价明细管理 (QuoteItem) - 从物料库添加物料 - 添加自定义项目 - 内联编辑:数量、单价、折扣 - 自动计算小计和汇总 - 拖拽排序 ### 3. 物料库管理 (Material) - 物料 CRUD 操作 - 分类筛选 - 品牌选择器(下拉搜索 + 快速创建) - Excel 批量导入/下载模板 - 面价、默认折扣设置 - 状态管理(在售/停产/推荐) ### 4. 品牌管理 (Brand) - 品牌 CRUD 操作 - 拖拽排序 - Logo 图片上传 - 官网链接管理 - 删除前检查关联物料 ### 5. 物料分类管理 (MaterialCategory) - 树形分类结构 - 拖拽排序 ### 6. 导出功能 (Export) - 导出报价单为 Excel - 支持自定义格式 ## 目录结构 ``` elecselectpro/ ├── application/ # 应用目录 │ ├── admin/ # 后台模块 │ │ ├── controller/ # 控制器 │ │ │ ├── Quote.php # 报价单管理 │ │ │ ├── Material.php # 物料库管理 │ │ │ ├── Brand.php # 品牌管理 │ │ │ ├── MaterialCategory.php # 物料分类 │ │ │ └── Export.php # 导出功能 │ │ ├── view/ # 视图模板 (Think模板) │ │ └── lang/ # 语言包 │ ├── api/ # API模块 (Token认证) │ ├── common/ # 公共模块 │ │ ├── controller/ # 基础控制器 │ │ ├── model/ # 数据模型 │ │ └── library/ # 类库 (Auth, Token等) │ ├── config.php # 应用配置 │ └── database.php # 数据库配置 │ ├── public/ # Web根目录 │ ├── assets/ # 前端资源 │ │ ├── js/backend/ # 后台JS模块 (RequireJS) │ │ │ ├── quote.js # 报价单 │ │ │ ├── material.js # 物料管理 │ │ │ └── brand.js # 品牌管理 │ │ ├── css/ # 样式文件 │ │ └── libs/ # 第三方库 │ ├── uploads/ # 上传文件 │ ├── index.php # 前台入口 │ └── admin.php # 后台入口 │ ├── thinkphp/ # 框架核心 (禁止修改) ├── vendor/ # Composer依赖 ├── addons/ # 插件目录 ├── runtime/ # 运行时文件 ├── docs/ # 项目文档 │ ├── .env # 环境配置 (数据库凭证) ├── composer.json # PHP依赖配置 ├── package.json # 前端依赖配置 ├── Gruntfile.js # 前端构建配置 ├── CLAUDE.md # 开发指南 └── QUOTE_INSTALL_README.md # 安装说明 ``` ## 安装部署 ### 环境要求 - PHP >= 7.4 - MySQL >= 5.7 - Nginx/Apache - Composer - Node.js & npm (前端构建) ### 安装步骤 1. **克隆项目** ```bash git clone elecselectpro cd elecselectpro ``` 2. **安装 PHP 依赖** ```bash composer install ``` 3. **配置环境** 创建 `.env` 文件: ```ini [app] debug = false trace = false [database] hostname = 127.0.0.1 database = elecselectpro username = your_username password = your_password hostport = 3306 prefix = fa_ ``` 4. **导入数据库** ```bash mysql -u用户名 -p数据库名 < application/admin/command/Install/quote.sql mysql -u用户名 -p数据库名 < application/admin/command/Install/quote_menu.sql ``` 5. **设置目录权限** ```bash chmod -R 755 runtime/ chmod -R 755 public/uploads/ ``` 6. **安装前端依赖 (可选,用于开发)** ```bash npm install npm run build ``` 7. **配置 Web 服务器** Nginx 配置示例: ```nginx server { listen 80; server_name your-domain.com; root /path/to/elecselectpro/public; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } ``` ### 访问系统 - 后台地址:`http://your-domain.com/admin.php` - 默认账号:admin - 默认密码:admin ## 数据库表 ### 核心业务表 | 表名 | 说明 | 关联 | |------|------|------| | `fa_quote` | 报价单主表 | → fa_admin, ← fa_quote_item | | `fa_quote_item` | 报价明细表 | → fa_quote, → fa_material | | `fa_material` | 物料库表 | → fa_category, brand字段 | | `fa_brand` | 品牌表 | - | | `fa_category` | 分类表 | type='material' | ### FastAdmin 系统表 | 表名 | 说明 | |------|------| | `fa_admin` | 管理员表 | | `fa_auth_group` | 权限组表 | | `fa_auth_rule` | 权限规则/菜单表 | | `fa_config` | 系统配置表 | | `fa_attachment` | 附件表 | ## API 接口 **注意**:实际 URL 路径为 `/admin/{controller}/{action}` ### 报价单接口 | 端点 | 方法 | 功能 | 权限 | |------|------|------|------| | `/quote/index` | GET/POST | 报价单列表 | quote/index | | `/quote/add` | GET/POST | 新建报价单 | quote/add | | `/quote/edit` | GET/POST | 编辑报价单 | quote/edit | | `/quote/del` | POST | 删除报价单 | quote/del | | `/quote/copy` | POST | 复制报价单 | quote/copy | ### 物料接口 | 端点 | 方法 | 功能 | 权限 | |------|------|------|------| | `/material/index` | GET/POST | 物料列表 | material/index | | `/material/add` | GET/POST | 新建物料 | material/add | | `/material/edit` | GET/POST | 编辑物料 | material/edit | | `/material/del` | POST | 删除物料 | material/del | | `/material/import` | POST | Excel导入 | material/import | | `/material/template` | GET | 下载模板 | - | ### 品牌接口 | 端点 | 方法 | 功能 | 权限 | |------|------|------|------| | `/brand/index` | GET | 品牌列表 | brand/index | | `/brand/add` | GET/POST | 新建品牌 | brand/add | | `/brand/edit` | GET/POST | 编辑品牌 | brand/edit | | `/brand/del` | POST | 删除品牌 | brand/del | ### 导出接口 | 端点 | 方法 | 功能 | 权限 | |------|------|------|------| | `/export/quote` | GET | 导出Excel | export/quote | ## 常用命令 ### 缓存管理 ```bash php clear_cache.php # 清理所有缓存 php think clear # 通过ThinkPHP清理缓存 ``` ### 前端构建 ```bash npm install # 安装依赖 npm run build # 完整构建 (复制库+压缩) grunt deploy # 复制npm包到 public/assets/libs grunt backend:js # 压缩后台JS grunt frontend:js # 压缩前台JS ``` ### Composer ```bash composer install # 安装依赖 composer update # 更新依赖 ``` ## 开发指南 ### 控制器开发模式 ```php namespace app\admin\controller; use app\common\controller\Backend; class MyController extends Backend { protected $model = null; protected $searchFields = 'name,title'; // 快速搜索字段 protected $noNeedRight = ['method1']; // 绕过权限检查的方法 public function _initialize() { parent::_initialize(); $this->model = new \app\common\model\MyModel(); } public function index() { if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $list = $this->model->where($where)->order($sort, $order)->paginate($limit); return json(['total' => $list->total(), 'rows' => $list->items()]); } return $this->view->fetch(); } } ``` ### 前端 JS 开发模式 (RequireJS) ```javascript define(['jquery', 'bootstrap', 'backend', 'table', 'form'], function ($, undefined, Backend, Table, Form) { var Controller = { index: function () { Table.api.init({ extend: { index_url: 'mycontroller/index', add_url: 'mycontroller/add', edit_url: 'mycontroller/edit', del_url: 'mycontroller/del', } }); var table = $("#table"); table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, columns: [ [ {field: 'id', title: 'ID'}, {field: 'name', title: '名称', operate: 'LIKE'}, {field: 'operate', title: '操作', formatter: Table.api.formatter.operate} ] ] }); Table.api.bindevent(table); }, add: function () { Form.api.bindevent($("form[role=form]")); }, edit: function () { Form.api.bindevent($("form[role=form]")); } }; return Controller; }); ``` ### 模板语法 (Think模板) ```html {$variable} {volist name="list" id="vo"} {$vo.name} {/volist} {if $status == 1} ... {elseif $status == 2 /} ... {else /} ... {/if} {:function()} ``` ## 权限配置 系统已配置 34 条权限规则: **菜单结构**: ``` 报价管理 ├── 品牌管理 (weigh=120) ├── 物料分类 (weigh=110) ├── 物料库 (weigh=100) ├── 报价单 (weigh=95) ├── 报价明细 (weigh=80) └── 导出报价 (weigh=70) ``` **数据访问控制**: - 报价单数据按 `admin_id` 进行权限隔离 - 超级管理员可访问所有数据 - 普通管理员只能访问自己创建的报价单 ## 文档 - [CLAUDE.md](./CLAUDE.md) - Claude Code 开发指南 - [QUOTE_INSTALL_README.md](./QUOTE_INSTALL_README.md) - 安装说明 - [docs/README.md](./docs/README.md) - 文档索引 - [docs/quote-system.md](./docs/quote-system.md) - 报价系统技术文档 - [docs/brand-management.md](./docs/brand-management.md) - 品牌管理文档 ## 安全特性 - **CSRF 保护**:表单包含 `__token__` 字段 - **权限验证**:基于 Auth 类的 RBAC 权限控制 - **数据隔离**:报价单按 `admin_id` 隔离 - **输入验证**:字段白名单、数值范围、长度限制 - **并发控制**:数据库事务保证一致性 ## 依赖说明 ### PHP 依赖 (composer.json) - `topthink/framework`: dev-master (ThinkPHP 5) - `phpoffice/phpspreadsheet`: ^1.29.1 - `fastadminnet/fastadmin-addons`: ~1.4.0 - `overtrue/pinyin`: ^3.0 ### 前端依赖 (package.json) - `bootstrap`: ^3.4.1 - `jquery`: ^3.7.1 - `bootstrap-table`: ^1.11.12 - `fastadmin-layer`: ^3.5.6 - `fastadmin-selectpage`: ^1.1.1 - `sortablejs`: ^1.12.0 ## 版本历史 - **v1.0.0** - 初始版本,包含报价单、物料库、品牌管理核心功能 ## 许可证 本项目基于 Apache-2.0 许可证开源。 ## 技术支持 如有问题请查阅文档或联系开发团队。