# yk-erp-api **Repository Path**: muxun-ohh/yk-erp-api ## Basic Information - **Project Name**: yk-erp-api - **Description**: yk-erp后台接口 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-15 - **Last Updated**: 2025-03-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ERP项目 ## 项目原型 [翼凯ERP](https://modao.cc/app/OUgx0pzNrpnejo4BRWww1N#screen=sle4152hxknxzr5) ## 项目结构 ~~~ yikai-erp-api # 父项目 ├─erp-common #子模块 通用模块 封装底层结构 引用后可以直接进行web开发 │ └─src │ ├─main │ ├─java │ │ └─com │ │ └─by │ │ └─common │ │ ├─bean #公共JavaBean │ │ ├─config #系统配置 │ │ ├─controller #通用的控制类 │ │ ├─crud #增删改查接口封装 │ │ ├─ex #自定义异常 │ │ └─group #分组验证 │ └─resources #项目配置文件 ├─erp-customer │ └─src │ ├─main │ ├─java │ │ └─com │ │ └─by │ │ ├─bean #实体类 mybatis别名包 │ │ ├─controller #控制层 │ │ ├─mapper #持久层 │ │ ├─query #查询条件封装 │ │ └─service #业务层 │ │ └─impl #业务层实现类 │ └─resources #配置文件 │ └─mybatis #mybatis配置目录 ├─erp-swagger #接口文档 自定义的启动器 引用后 配置相关信息 可以使用接口文档相关注解 └─erp-token #token启动器 引用后提供TokenTemplate工具类,提供默认拦截验证功能 ~~~ ## 开发前期 面试: 说一下你们软件开发的流程 1. 需求分析 > 前期分析: 了解客户的需求 产品经理------原型 > > 开发团队: > > * 项目经理 管理整个项目 保证项目的正常交付 > > * 技术经理 负责整个项目的技术 攻克技术难点 > > 架构师 > > * 产品经理 根据用户需求 不断完善原型 > > > 1. 墨刀 > > 2. axure > > * 开发组长 > > * 开发人员 2. 开发 > 开会 讨论需求 > > 需求分析 、数据库设计 > > 统一规范: > > 常用字段: > > * 创建时间 createTime timestamp > * 更新时间 updateTime > * 创建人 > * 更新人 > * 逻辑删除 isdel 0 1 > > 接口开发 * 开发计划 > 开发时间:最少1/3 时间去测试 > > 估计时间: 1*1.5 /2 3 > > 项目管理软件: > > * jria > * 禅道 > * teambtion > * 腾讯云 > * 阿里云 > * .... ## 分析设计 跨境贸易:外销 客户-----查看产品------询价------报价------同意=-----订单-----(销售采购 )----供应商生产----发货----验收 ## 客户功能 * 客户列表 多条件 分页 * 新增客户 * 更新客户 * 导入 * 导出 * 重置密码 * 客户登录 * 忘记密码 ## mybaits获取主建 ## 三层结构 ![image-20250218100153345](assets/image-20250218100153345.png) ## 三个模块 * 控制层模块 -----------依赖于业务层模块 + 增加 post + 删除 delete + 查找 get + 修改 put * 业务层模块------------持久层模块 * -持久层模块 ## 按业务划分模块 # 中后台 ## 初始化 > * 若依 > * [其它](https://blog.csdn.net/qq_37237487/article/details/144157743) ~~~shell #安装pnpm npm install -g pnpm #查看镜像 npm config get registry # https://registry.npmmirror.com #默认镜像 https://registry.npmjs.org #设置淘宝镜像 npm config set registry=https://registry.npmmirror.com #进入目录 安装依赖 pnpm install #运行 pnpm dev ~~~ ## 配置路由 TypeScript 是JavaScript的超集. SPA single page application 单页应用 安装图标库: ~~~shell pnpm install @element-plus/icons-vue ~~~ 一个js文件就是模块,作用是复用代码。 ## 组合 式API中路由的使用 在main.ts中 app.use(router); 安装路由插件(插件就是vue实例上增加属性或方法): 在vue实例上增加两个属性: * $router 代表路由实例 用于路由跳转 * $route 代表路由信息(路由参数) 那么组合式API,要想使用,需要通过两个函数: * useRouter() 返回路由实例 * useRoute() 返回路由信息 跳转: [官网查看](https://router.vuejs.org/zh/guide/essentials/navigation.html) ~~~javascript // 字符串路径 router.push('/users/eduardo') // 带有路径的对象 router.push({ path: '/users/eduardo' }) // 命名的路由,并加上参数,让路由建立 url router.push({ name: 'user', params: { username: 'eduardo' } }) // 带查询参数,结果是 /register?plan=private router.push({ path: '/register', query: { plan: 'private' } }) // 带 hash,结果是 /about#team router.push({ path: '/about', hash: '#team' }) ~~~ ## 产品 商品图片: 正常上传,存储到服务器,有图片的相对目录 材质: 名称 编号(自动生成的) 更新时间 操作人 产品型号: 名称 创建时间 品牌: 名称 创建时间 客户类型: 类型 字典表 典型的上下级关系: * 分类 * 部门 * 省市区 * 行业 通过父id维护上下级关系 ## 编码(唯一) 询价单号: ### 归零机制 编码组成: 前缀+日期+序号 订单编号: dd20250001 * 按日归零 > dd202502200001 dd202502200002 > > 假如到了21号 > > dd202502210001 ...... * 按月归零 > dd2025020001 ..... > > dd2025030001.... * 按年归零 > dd20250001 ### 商品类别编码 类别编码: > 10 家用电器 > > 11 手机 > > 1 12 电脑 > > > 3 电脑整机 1201 > > > > > 笔记本 120101 > > > > > > 10 游戏本 120102 > > > > 电脑配件 1202 > > > > ..... 商品: 所属类别编码 联想... 120102 查询: like '120102%' ​ like '1201%' ​ like '12%' > 假如存类别id A 10 > > 商品编码:仓库编码+类别编码+序号 11201020001 ### 权限 分类: * 功能权限 RBAC * 数据权限 用户信息: * 最低权限 人的名称 家庭 。。。 * 高 * ,,,, CRM系统:客户关系管理系统 要求: 销售人员只能查看自己的客户 销售经理: 查看整个团队所有销售人员的客户资料 销售总监: 查看所有团队的客户资料 涉及: * 部门 > 百度: > > 10 技术部 > > 11 宣传部 > > 12 市场部 > > > 1201 销售一部 > > > > 1202 销售二部 * 岗位 销售人员 销售经理 销售总监 * 员工 > 张三 120101 > > 李四 120102 > > 。。。。 设计客户表时: 添加人 拥有人 (120101) > 假如:张三 离职 客户的拥有人改为李四 查询时根据岗位判断: * 如果是销售人员 查询拥有人=销售人员编码 120101 * 如果是销售经理 查询拥有人 like '销售经理所在部门编码%' '1201%' * 如果是总监 查询拥有人 like ‘12%’ ## 询价单 > 网购: > > > 订单表-----多个----订单明细 > > 订单表: 订单编号 订单金额 订单状态 订单人 订单时间 收货 人 收货人电话 地址 > > 订单明细表:商品id , 商品名称 价格 数量 。。。 (商品id 购买数量 ) * 询价表 编码 类型 联系人名称 电话 状态 总价 运费 询价人 (客户) 询价时间 询价描述 更新时间 ... * 询价明细 产品名称 型号 价格 数量 产器id 询价单id ## 字典 * 新增 * 查询 根据pid来查询 * 查询 根据code (分组编码 ) 查询字典配置 宽高: * vh view height 1vh 1%高度 * vw view width ## 单向数据流 所有的 props 都遵循着**单向绑定**原则,props 因父组件的更新而变化,自然地将新的状态向下流往子组件,而不会逆向传递 注意: * 属性是只读的 ,不要尝试更改属性值 * 如果有更改需求: > 1. 属性做为初始值使用,声明一个响应式对象,它的值是属性值,可以对响应式对象进行更改 > 2. **需要对传入的 prop 值做进一步的转换** 通过计算属性实现 布尔属性值,如果为true,可以简化为属性名,如 ~~~vue ~~~ ## 子组件向父组件传参(事件) 通过事件向父组件传参: 事件实现: 子组件: * 声明事件 通过const emit=defineEmits([事件名称,.......]) 来 声明 ~~~javascript //声明事件 关闭事件 const emit=defineEmits(["close"]); ~~~ * 触发事件 ,在子组件中 在合适的时机触发自定义事件 emit("事件名称 ") ~~~javascript //用户点击关闭 function cls(){ console.log("--------cls") //触发事件 emit("close"); } ~~~ 注意:在模板中,可以通过$emit(事件) 直接触发事件 ~~~vue ~~~ 父组件: * 要监听子组件中 对应的事件 ~~~vue ~~~ 触发事件函数: * $emit("事件名称") 只是触发事件,父组件监听 * 事件参数 $emit("事件名称",args1,arg2,......) 后面可传递任意多个能数 父子组件 * 父组件向子组件传参 通过子组件 属性实现 * 子组件向父组件传参 通过事件 $emit("事件",参数.....) 广州实地集团: 售前系统 ,两个app: 开发时间5个月 * 拓客 * 案场 uniapp 后端: * 数据库设计 * 接口开发 * 中后台开发 * 项目部署 * 测试