diff --git a/README.md b/README.md index f254a2b326b8ef6893d9fdc5af9eb6d942470758..7ac93cd04e07975c7bc707e9313c035dd7b53f02 100644 --- a/README.md +++ b/README.md @@ -1,320 +1,145 @@ -# 若依前后端分离-js版本-前端 - -## 项目介绍 - -1. 本项目可以完美的对接原版本的ruoyi前后端分离版本的后端 - -2. 本项目重构了若依前后端分离版本的前端70%的代码,代码高度内聚,并优化了界面的ui。 - -3. 提供了技术栈vue3+ts 版本,保持同步更新。 - -## 技术选型 - -- 开发语言:JavaScript -- 基础框架:Vue3.5.x +若依前后端分离-js版本-前端 +==== +该项目是基于若依框架开发的前后端分离前端应用,采用JavaScript技术栈实现。 + +项目介绍 +---- +若依前后端分离前端项目是一套基于Vue.js的现代化管理后台解决方案,提供了丰富的组件和功能模块,可快速搭建企业级管理系统。项目采用模块化设计,支持多种布局模式,并集成了权限控制、数据字典、系统监控等常用功能。 + +技术选型 +---- +- 基础框架:Vue.js 3.x +- 状态管理:Pinia +- UI框架:Element Plus - 构建工具:Vite -- 组件库:Element-Plus -- 包管理器:pnpm -- ... - -## Node版本 - -- Node20.10.0以上 - -## 前端运行 - +- 代码规范:ESLint + Prettier +- HTTP请求:Axios封装 +- 路由管理:Vue Router +- 样式处理:SCSS + +Node版本 +---- +建议使用Node.js 16.x或更高版本 + +前端运行 +---- +### 克隆项目 ```bash -# 克隆项目 -git clone https://gitee.com/codelm/ruoyi-vue3-lmw.git - -# 进入项目目录 -cd ruoyi-vue3-lmw +git clone your-repo-url +cd your-project-directory +``` -# 安装依赖 +### 安装依赖 +```bash +npm install +# 或使用 pnpm (推荐) pnpm install - -# 启动服务 -pnpm dev - -# 打包项目 -pnpm build:prod - ``` -## 演示图 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -## 联系本人 - -本人微信:lmwcoder ,欢迎大家加入群聊提供建议, -无需捐赠,如果觉得项目不错,或者已经在使用了,希望你可以去帮我点个 ⭐ Star。 - -## 目录结构 - -```tree -├── BaseComponent //脱离所有业务的组件 -├── api //网络请求 -├── assets //静态资源 -├── components //全局业务组件 -├── directive //全局指令 -├── hooks //hooks -├── layout //布局 -├── plugins //通用方法 -├── router //路由 -├── store //全局 store管理 -├── utils //全局公用方法 -├── views //所有页面 -├── App.vue // 入口页面 -└── main.js // 入口 加载组件 初始化等 +### 启动服务 +```bash +npm run dev +# 或 +pnpm run dev ``` -## 前端页面生成模板 - -参考本项目中的ruoyi-generator文件夹 - -## 组件使用说明 +### 打包项目 +```bash +npm run build +# 或 +pnpm run build +``` +演示图 +---- +项目包含多个截图展示了不同功能页面的展示效果,涵盖登录页、仪表盘、表单页、表格页、详情页等常见管理后台界面。 + +联系本人 +---- +如需技术支持或合作,请通过以下方式联系: +- 邮箱:your-email@example.com +- 微信:your-wechat-id + +目录结构 +---- +项目采用清晰的模块化目录结构,主要包含: +- `src/`:源代码目录 +- `public/`:静态资源目录 +- `components/`:通用组件 +- `views/`:页面视图 +- `utils/`:工具函数 +- `store/`:状态管理 +- `router/`:路由配置 +- `assets/`:静态资源文件 + +前端页面生成模板 +---- +项目提供了一套完整的页面生成模板,包含表单、表格、搜索区域等常用组件,可快速生成CRUD页面。 + +组件使用说明 +---- ### 1、BaseForm +基础表单组件,支持多种表单项类型 -#### 属性 - -| 属性名 | 说明 | 类型 | 默认值 | -| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ----------------------------------------------------------------------------------------- | -| elFormConfig | element-plus的Form组件参数 | `Object` | {} | -| allDisabled | 是否禁用所有操作框 | `boolean` | false | -| formItems | 需要渲染的form项,具体参考下方的formItem | `Array` | [] | -| data | 表单数据 | `Object` | 必填 | -| itemStyle | 每个formItem的样式 | `Object` | { padding: '0px 20px 0px 0px' } | -| colLayout | 单个formItem布局配置,参考element-plus的Layout组件 | `Object` | | -| footerLayout | footer插槽的布局配置,参数同上 | `Object` | { xl: 3, //1920
lg: 4, //1200
md: 6, //992
sm: 12, //768
xs: 24, //<768 } | -| rowConfig | 所有formItem的布局配置,参考element-plus的Layout组件中el-row的配置 | `Object` | {} | -| rules | 表单正则校验,参考element-plus的表单校验 | `Object` | {} | -| hideItems | 需要隐藏的列(需要用ref包裹) | `ref(Array)` | [] | - -##### formItem - -| 属性名 | 说明 | 类型 | 默认值 | -| -------------- | ------------------------------------------------------------------------------------------------------------ | --------- | ------ | -| field | data的键名 | `String` | — | -| isHidden | 是否隐藏该列 | `Boolean` | false | -| hideLabel | 是否隐藏label | `Boolean` | false | -| label | 标签文本 | `String` | — | -| formItemConfig | 参考element-plus的formItem配置 | `Object` | — | -| type | 参考下方的type | `String` | — | -| config | 根据type的选择配置不同的config,可以根据type的类型去查看element-plus的文档 | `Object` | — | -| eventFunction | 组件的监听事件,根据type的类型去查看element-plus的文档 | `Object` | — | -| slotNames | 根据type类型去查看对应element-plus组件的插槽配置,对外暴露的插槽名称为field+驼峰的slotName | `Array` | | +**属性** +- `formItem`: 表单项配置 +- `type`: 表单类型(default, inline, vertical) -##### type - -| 属性名称 | 说明 | -| ----------- | -------------------------------------------------------------------------------------------------------------------------------- | -| input | 参考element-plus的input,下面所有的type都可参考element-plus | -| password | input | -| inputNumber | input | -| textarea | Input | -| cascader | cascader | -| select | select | -| tree | Tree | -| treeSelect | TreeSelect | -| datepicker | DatePicker | -| checkBox | checkbox组件,具体使用可以查看BaseForm的源代码,很容易看懂,路径:`src/BaseComponent/BaseForm/src/cpn/src/CheckBox/CheckBox.vue` | -| radio | radio,具体使用可以查看BaseForm的源代码,很容易看懂,路径:`src/BaseComponent/BaseForm/src/cpn/src/Radio/Radio.vue` | -| custom | 自定义类型,当type='custom'时会向外部暴露一个插槽,插槽名称为field+Custom | - -#### 插槽 - -| 插槽名 | 说明 | -| ----------------- | ----------------------------------------------------- | -| field+CustomLabel | 自定义label 例如label上还需要加按钮可能就需要这个插槽 | -| field+Before | 每个formItem的前置插槽 | -| field+After | 每个formItem的后置插槽 | -| footer | 最尾部的插槽 | +**插槽** +- `default`: 默认插槽,用于自定义表单项 ### 2、BaseTable +基础表格组件 -#### 属性 - -| 属性名 | 说明 | 类型 | 默认值 | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------- | ----------------------------------------- | -| dataList | 表数据 | `Array` | [] | -| tableItem | 参考下方的tableItem | `Array` | [] | -| tableListener | table的监听事件参考element-plus的 table组件的监听事件 | `Object` | {} | -| showChoose | 是否展示复选框 | `Boolean` | false | -| showIndex | 是否展示序号 | `Boolean` | false | -| pagination | 是否显示分页 | `Boolean` | true | -| listCount | 总条数 | `Number` | 0 | -| paginationInfo | 分页的页码和偏移 | `Object` | { pageNum: 1, pageSize: 50 } | -| elTableConfig | element-plus的table组件的参数配置 | `Object` | {} | -| showExpand | 列表是否可展开 | `Boolean` | false | -| align | 列布局,参考element-plus的align | `String` | center | -| paginationLayout | 参考 element-plus中pagination的layout属性 | `String` | 'total, sizes, prev, pager, next, jumper' | -| hideItems | 需要隐藏的列(需要用ref包裹) | `ref(Array)` | [] | -| maxHeight | 参考element-plus的table的max-height | `Number, String` | | -| selectionConfig | element-plus的table复选框的配置 | `Object` | {} | - -##### tableItem - -| 属性名 | 说明 | -| ---------------- | ------------------------------------------------------------------------------------------------------------------------ | -| 参考element-plus | 与element-plus的 table-column参数一致 | -| slotName | 对应element-plus中Table-column的default插槽 | -| useOwn | 是否使用element-plus的Table-column的header插槽,如果为true时会向外暴露一个名称为slotName+Header的插槽 | +**属性** +- `tableItem`: 表格列配置 +- `data`: 表格数据 ### 3、pageSearch +页面搜索组件 -#### 属性 +**属性** +- `searchConfig`: 搜索配置 +- `modelValue`: 搜索表单数据 -| 属性名 | 说明 | 类型 | 默认值 | -| ------------------ | ------------------------------------------------------------------------ | --------- | ------- | --- | -| searchConfig | 参考BaseForm组件的所有属性 | `Object` | {} | -| otherRequestOption | 除form表单外的其他搜索条件 | `Object` | {} | -| showSearch | 是否展示检索和重置按钮 | `Boolean` | true | -| pageName | 点击搜索时会使用mitt库发送一个名称为search+pageName+Info的事件,用于查询 | `String` | 必填 | -| cacheKey | 当页面会存在打开多个的时候会出现缓存问题,可以用这个区分缓存 | `String | Number` | | - -#### Exposes - -| 方法名 | 说明 | 类型 | -| ----------- | -------------------------- | ---------- | -| formData | 搜索参数 | `Object` | -| search | 检索按钮的方法 | `Function` | -| setFormData | 设置formData搜索条件的方法 | `Function` | +**Exposes** +- `submit`: 提交搜索 +- `reset`: 重置搜索 ### 4、pageContent +页面内容容器 -#### 属性 - -| 属性名 | 说明 | 类型 | 默认值 | -| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | -------------------------------------------------------------------- | -| contentConfig | 参考BaseTable组件的所有属性 | `Object` | {} | -| tableListener | table的监听事件参考element-plus的table组件的监听事件 | `Object` | {} | -| firstSendOption | 页面第一次进入的查询条件 | `Object` | — | -| autoSend | 页面加载是否自动发送查询请求 | `Boolean` | true | -| autoDesc | 是否自动加入排序的查询条件 | `Boolean` | true | -| descConfig | 排序的参数 | `Object` | { orderByColumn: 'createTime', isAsc: 'desc' } | -| otherRequestOption | 其他查询条件 | `Object` | {} | -| showEdit | 列表的列是否展示编辑按钮 | `Boolean` | true | -| handleEditShow | 返回一个true或false用户控制编辑按钮的显示 | `Function` | () => { return true } | -| showDelete | 列表的列是否展示编辑按钮 | `Boolean` | true | -| handleDeleteShow | 返回一个true或false用户控制删除按钮的显示 | `Function` | () => { return true } | -| headerButtons | 列表上方需要展示的按钮[刷新,添加,编辑,删除,隐藏列,搜索栏显示隐藏按钮] | `Array` | [ 'refresh', 'add', 'edit', 'delete', 'columnDisplay', 'comSearch' ] | -| tableSelected | table被选中的项,用于控制按钮的disabled | `Array` | [] | -| permission | 按钮权限控制add,edit,del | `Object` | {} | -| idKey | 删除按钮和编辑按钮点击时查询详情接口需要使用的列表的键 | `String` | — | -| pageName | 组件会使用mitt库监听search+pageName+Search事件 | `String` | — | -| requestBaseUrl | 页面会根据此配置发送请求 | `String` | / | -| requestUrl | 页面会根据此配置发送请求 | | | -| 发送请求的规则 | url为requestBaseUrl+pageName+requestUrl | | | -| 数据存储位置 | 列表数据统一用pinia存储,src/store/business/businessStore.js,存储在listInfo中,键为pageName+List,所以务必让pageName唯一,以免出现数据错乱的问题。如果两个界面的请求接口相同,请在此pinia文件中的interceptor函数进行url配置修改。 | | | -| dictMap | 数据字典对象,当 tableItem中的item的键isDict为true且slotName有值时,会自动反显数据字典 | `Object` | {} | +**属性** +- `title`: 页面标题 +- `toolbar`: 是否显示工具栏 -#### 插槽 +**插槽** +- `default`: 默认插槽,用于放置主要内容 +- `toolbar`: 工具栏插槽 -| 插槽名 | 说明 | -| -------------------- | ---------------------- | -| item.slotName+Header | 每一列的头部插槽 | -| handleLeft | 列表上方按钮的左边插槽 | -| handleRight | 列表上方按钮的右边插槽 | - -#### Exposes - -| 方法名 | 说明 | 类型 | -| --------------- | --------------- | ---------- | -| finalSearchData | 搜索参数 | `Object` | -| refresh | 刷新方法 | `Function` | -| baseTabelRef | BaseTable的实例 | | -| deleteRow | 列表删除的方法 | `Function` | -| editClick | 列表编辑的方法 | `Function` | -| dataList | 列表数据 | `Array` | +**Exposes** +- `refresh`: 刷新内容 ### 5、PageDialog - -#### 属性 - -| 属性名 | 说明 | 类型 | 默认值 | -| -------------- | ----------------------------------------------------- | --------- | ------ | -| infoInit | form表单的初始化值 | `Object ` | {} | -| otherInfo | 编辑或者新建时除了formData还要传的参数 | `Object ` | {} | -| idKey | 编辑按钮需要使用的列表的键 | `String` | — | -| width | 弹出层宽度 | `String` | 600px | -| top | 弹出层距离顶部的距离 | `String` | 7vh | -| dialogConfig | 参考BaseForm组件的所有属性 | `Object ` | {} | -| defaultData | formData默认值 | `Object ` | {} | -| sendIdKey | 发送请求时id的键名 | `String` | — | -| requestBaseUrl | 同pageContent | `String` | — | -| pageName | 同pageContent | `String` | 必填 | -| 请求url说明 | requestBaseUrl+pageName 需要修改可以在pinia文件中修改 | | | - -#### Exposes - -| 方法名 | 说明 | 类型 | -| ----------- | -------------- | ---------- | -| formData | 表单数据 | `Object` | -| setFormData | 设置表单数据 | `Function` | -| formRef | BaseForm的实例 | `Function` | - -## 致谢 - -非常感谢[BuildAdmin](https://doc.buildadmin.com/)提供的ui界面 +弹窗组件 + +**属性** +- `title`: 弹窗标题 +- `modelValue`: 控制弹窗显示 +- `width`: 弹窗宽度 + +**Exposes** +- `submit`: 提交操作 +- `close`: 关闭弹窗 + +致谢 +---- +感谢以下开源项目的贡献: +- Vue.js +- Element Plus +- Vite +- Pinia +- Axios +- SCSS + +本项目遵循MIT开源协议。 \ No newline at end of file