diff --git a/README.md b/README.md index 6a3adfa4..47c53349 100644 --- a/README.md +++ b/README.md @@ -4,34 +4,31 @@

- 唛盟(mdp-lcode vue3 ):多功能、高效率、低代码(支持0代码) 前后端一体化、智能化的开发工具 + 唛盟xm:涵盖项目规划、需求管理、开发迭代、版本控制、缺陷跟踪、测试管理、工时管理、效能分析等环 +节,实现项目全过程、全方位管理的一站式企业研发项目管理解决方案

- - gitee star + + gitee star

- 👉 https://maimengcloud.com 👈 + 👉 https://maimengcloud.com 👈

-## 快速导航 +## 快速导航 -- [唛盟-后端开发底座](https://gitee.com/maimengcloud/mdp-core) -- [前端组件](https://gitee.com/maimengcloud/mdp-lcode-ui-web) -- [后端服务](https://gitee.com/maimengcloud/mdp-lcode-backend) -- [体验环境](https://maimengcloud.com/lcode/) - 登陆界面上选择演示账号登陆或者直接扫码登陆,无须注册 -- 👉[教程]b站上搜素 [唛盟9哥教你撸前后端代码](https://www.bilibili.com/video/BV111421S72r/?spm_id_from=333.337.search-card.all.click&vd_source=93be23d03863773d50b81112985b9237) +- [前端组件](https://gitee.com/maimengcloud/xm-ui-web) +- [后端服务](https://gitee.com/maimengcloud/xm-backend) +- [体验环境](https://maimengcloud.com/xm/m1/) + 登陆界面上选择演示账号登陆(账号密码:demo-branch-01 888888)或者直接扫码登陆,无须注册 +- 相关教程b站上搜素[唛盟9哥教你撸前后端代码](https://www.bilibili.com/video/BV111421S72r/?spm_id_from=333.337.search-card.all.click&vd_source=93be23d03863773d50b81112985b9237) - -## 📢 简介[唛盟低代码开发平台mdp-lcode](/) - -唛盟低代码开发平台简称唛盟或者mdp. 👉[唛盟-总体介绍](https://www.bilibili.com/video/BV111421S72r/?spm_id_from=333.337.search-card.all.click&vd_source=93be23d03863773d50b81112985b9237) -唛盟旨在为企业开发业务系统提供一整套解决方案,唛盟具有高效率、低代码、支持0代码、功能丰富等特点。企业可以在唛盟工程之上,加入更多其它业务功能;也可以以唛盟作为模板,创建新的工程,用于开发其它业务。使用唛盟构建应用,您不用考虑多租户、登录、统一认证中心、权限、菜单管理、系统管理、公共组件、公共api、代码冗余、数据字典、图片库、文件库、智能表单、工作流、微服务互相调用、全局跟踪定位bug、多主键crud,复杂sql查询等各种问题,这些问题的解决方案都作为扩展功能内置唛盟工程中了。 +## 📢 简介[唛盟xm](/) +唛盟企业级研发管理系统简称唛盟xm,属于唛盟生态的专业子系统之一,以研发管理为核心,涵盖项目规划、需求管理、开发迭代、版本控制、缺陷跟踪、测试管理、工时管理、效能分析等环节,实现全过程、全方位的研发管理。通过该系统,企业能够优化研发流程,提高研发效率,降低研发成本,提高市场竞争力。 💪给你一个使用唛盟的理由:代码大量减少、开发so easy、前后端MIT协议、全部开源、永久免费 ## 📢 唛盟生态 @@ -78,7 +75,7 @@ | 框架 | 说明 | 版本 | |----------------------------------------------------------------------|------------------|--------| -| spring boot | spring boot 框架 | 2.4.1 | +| spring boot | spring boot 框架 | 2.6.11 | | mybatis plus | 数据库操作框架 | 3.5.3.1 | | spring security | 安全框架 | 2.1.7 | | jsqlparse | sql解析引擎 | 4.7+ | @@ -110,7 +107,6 @@ | Prettier | 代码格式化 | | ESLint | 脚本代码检查 | | DotENV | env 文件高亮 | -| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro)|前端流程ui基于若依修改 @@ -120,513 +116,176 @@ | idea | java 开发工具 社区版、企业版都可 | -## 😭 日常开发中,您是否有以下痛点? - -- **团队中缺乏企业级前后端分离的开发底座**,需要在各种框架中进行摸索、整合。 -- ai时代,开发工具如何去支持未来的软件开发? -- 重复造轮子现象严重、浪费人力、对开发者经验要求过高。 -- 缺乏统一的开发模式,缺乏公共组件的抽取和共享机制,导致业务代码混乱不堪、代码臃肿、bug多、维护困难 -- 缺乏统一的足够灵活的权限管理机制,开发人员不得不写一堆的权限代码混入业务代码中,前端权限、后端权限控制混乱不堪 -- 缺乏统一的能够覆盖前后端的、满足前后端分离的代码生成器,代码模板无法按企业现状进行重新编辑、修改 -- 缺乏统一的编程规范,或者具有书面编程规范,难以贯彻落实到开发中,代码还是五花八门 -- 缺乏统一的元数据(数据字典)管理机制,前后的数据共享调用困难,下拉列表数据混乱不堪 -- 缺乏统一的流程管理机制,要想进行流程类业务开发非常困难 -- 缺乏统一的国际化机制,国际化实施困难,不得不针对各种语言发布多个版本,无法解决后端国际化、前端国际化等问题 -- 缺乏统一的微服务、分布式系统整合机制,微服务互相调用、微服务的权限管理困难 -- 缺乏统一的认证中心,单点登录实施困难 -- 缺乏统一的支付整合机制,接入微信、支付宝、paypal等困难 -- 缺乏项目管理工具,项目计划、任务委派、质量管理、需求管理、持续集成等完全没概念 -- **让 唛盟-mdp 来帮你解决这些痛点吧!然而,这些只是 唛盟-mdp 解决的最基础的功能。** - -## 😁 为什么要使用唛盟产品 - -- 唛盟所有子系统从前端到后端提供ai支持能力 - 1. 前端每个字段可以调起ai指令、el表达式 - 2. 后端每个接口可以支持识别ai指令、el表达式 - 3. 后端支持接入大模型 - 4. 具有根据企业数字资产进行ai自训练能力 - -- 完全开源、永久免费的企业级开发底座 - 1. 使用mdp能够带来开发效率的大幅提升,代码行数大幅减少,质量提升明显 - 2. 使用mdp能够大幅度降低对开发人员的经验要求,大幅度降低人力成本 - 3. mdp对各种开源组件进行了融合改进,提供了针对企业开发中各种问题的最佳解决方案 - 4. 企业使用一套开源软件即同时拥有前端开发框架及后端开发框架 - -- 统一的开发模式 - 1. 前后端分离 - 2. 前后端都分别进行了技术组件、业务组件的抽取、共享,企业可以进行再提炼、抽象,形成更多的公共组件,对后续开发形成强力的支撑作用 - -- 足够灵活的权限管理机制 - 1. 前端提供统一的按钮级别的权限判断接口、提供路由菜单的权限控制机制 - 2. 后端实现api接口的自动注册、自动审核 - 3. 基于岗位-部门-角色-菜单及按钮-后端api-人员 6要素的权限管理机制,可以0编程实现绝大多数的权限需求 - -- 基于领域驱动设计(DDD)的框架及代码生成器 - 1. 代码生成器覆盖前端、后端,支持任意时刻的重新生成,支持命令行、开发工具插件、在线三种方式生成代码,生成的代码可以0编程使用 - 2. 代码生成器代码模板可以按企业现状进行修改、满足不断发展、持续改进的需求 - 3. 支持多个表一次性生成,也就是可以一次性生成几十到几百张表的增删改查功能,而开发人员仅需要填写表名即可完成 - -- 提供完整的编程规范说明 - 1. mdp的框架提供了完备的接口说明、组件说明、组件使用场景等 - 2. mdp维护团队提供在线支持,及时解答、解决开发者使用过程中的问题 - -- 提供强大的元数据(数据字典)管理机制 - 1. 内置了元数据管理模块,并实现了元数据的分布式缓存、客户端缓存、元数据分发、缓存清理等 - 2. 开发者在客户端、任意微服务中、任意单体应用中可以快速获取元数据 - 3. 元数据的调用效率等同于调用本地map缓存,几乎可以忽略使用元数据的性能开销问题 - -- 整合了最新版本的强大的flowable工作流引擎 - 1. 基于mdp框架重新开发了流程中心、任务中心、流程的发布、上下架等功能 - 2. 提供分布式环境下的流程调用、流程整合问题的解决方案 - 3. 提供vue3版本在线流程设计器,并整合了mdp的权限机制 - 4. 整合了mdp的智能表单 - 5. 整合了mdp的数据字典,通过配置即可实现大部分业务场景,真正做到流程设计、部署、运行0耗时,0延迟。 - 4. 任务的提交支持几乎能想到的各种方式:转办、委办、主办、前加签、后加签、减签、发起人处理、驳回任意节点、审批同意、审批不同意但流程继续、拒绝终止流程等,同时提供框架的提交方式可扩展性,让你轻松应对各种变态需求。 - 5. 会签支持:会签、或签、过半通过、一票否决等等 - 6. 任务分配到人十来种策略支持并提供扩展接口:按岗位、按部门、按组、按标签、按指定人员、发起人、上一步执行人、上一步执行人临时指定、发起流程时统一指定、转主办、转监控、按高级自定义查询条件、 - 7. 整合了mdp的消息发送机制,轻松发送流程消息到im、站内信、公众号、短信 - 8. 整合mdp事件模型,为将来ai调用流程等创新场景提供底层基础 - 9. 提供业务模块内嵌页面发起流程的组件和统一的方式,开发几乎可以无视工作流相关的接入工时。 - 10. 整合mdp附件管理 - - -- 提供强大的国际化解决方案 - 1. 前后端均支持分别进行国际化 - 2. 多语言的支持与业务代码完全解耦,彻底解决硬编码进行语言切换的问题 - -- 整合了强大的微服务框架 - 1. mdp平台任意组件均同时支持微服务环境、单体应用环境运行,开发人员开发的时候可以以单体应用的方式开发,然后以微服务方式发布到生产、测试环境 - 2. 提供微服务的治理 - -- 强大的DAO层 - 1. 支持基于xml文件的sql编写 - 2. 支持无xml方式的数据访问 - 3. 支持多主键(对mybatis plus进行升级,解决了多主键、多表联合查询等问题) - 4. 支持多数据源,通过备注实现数据源切换 - 5. 支持前端构建任意复杂的查询条件并提供对应的最佳实践,支持前端输入框输入>,=,*,$IS NULL,$IN,$NOT IN等运算操作符,支持前端通过 or and 连接符构建任意复杂的条件表达式 - -- 强大的web ui - 1. 提供好用好看的ui组件库 - 2. 提供页面高级查询功能、可以组装任意复杂的查询条件 - 3. 提供针对元数据(数据字典)的引用、针对任意表的引用的组件库 - 4. 提供导入、导出等基础功能 - 5. 提供按钮权限判断接口、 - 6. 提供动态菜单功能 - -- 提供自定义表单解决方案,具有0代码0延时发布一个新功能的能力 - 1. 自定义表单设计 - 2. 表单展现 - 3. 表单数据管理 - 4. 自定义表单与工作流整合使用 - 5. 自定义表单发布成普通菜单 - -- 整合了微信支付、支付宝支付、paypal支付 - 1. 提供支付、订单、支付通知底层框架,可以快速整合各种支付功能 - 2. 整合了微信支付功能,进行配置文件更新即可使用 - 3. 整合了支付宝支付功能,进行配置文件更新即可使用 - 4. 整合了paypal支付,进行配置文件更新即可使用 - -- 整合了oauth2.0框架 - 1. 提供oauth2.0的整体框架,构建统一认证中心、单点登录等不再是难事 - 2. 整合了微信、支付宝、手机验证码、账户密码等登录方式 - -## 💪 内置功能、界面展示 - -### 组织管理 -|功能 |描述| -|-------------------------------|--------------------------| -|机构管理 | 企业信息维护、管理员维护、账户信息维护、企业产品维护、| -|用户管理 | 用户的crud、分配岗位、分配部门、重置密码、邀请| -|部门管理 | 部门curd、分配岗位到部门、查看部门用户| -|公司管理 | 公司curd(超级管理员使用)| -|岗位管理 | 岗位curd、分配角色到岗位、岗位人员查看| -|注销审核 | 审核用户的注销申请| - -![branch-set](./docs/images/module/branch-set.png) - -![dept-set](./docs/images/module/dept-set.png) - - -### 个人中心 -|功能 |描述| -|-------------------------------|--------------------------| -|个人信息 | 基本信息、邮箱、手机、企业绑定、微信绑定等| -|我的消息 | 接收个人私信、公告等| -|登录日志 | 查询我的登录日志 | - -![user](./docs/images/module/profile-base.png) -### 角色权限 -|功能 |描述| -|-------------------------------|--------------------------| -|角色管理 | 角色crud、分配菜单、分配权限| -|权限定义 | 权限crud| -|菜单管理 | 菜单(按钮)crud、分配菜单(按钮)给角色、| -|模块管理 | 模块crud| -|已开模块 | 查看企业(个人)已开通的模块| - -![post-set](./docs/images/module/post-set.png) -![role](./docs/images/module/role.png) - -### 平台管理 -|功能 |描述| -|-------------------------------|--------------------------| -|平台配置 | 配置平台的信息| -|个人认证审核 | 审核个人的实名认证请求| -|企业认证审核 | 审核企业的实名认证请求| - -![platform](./docs/images/module/platform.png) - -### 元数据管理 -|功能 |描述| -|-------------------------------|--------------------------| -|字典管理 | 数据字典的crud| -|列表维护 | 下拉列表数据项的crud| -|参数定义 | 公共系统参数的crud| - - -![metaItem](./docs/images/module/metaItem.png) -![itemSet](./docs/images/module/itemSet.png) -![optionList](./docs/images/module/optionList.png) - -### 数据模型 -|功能 |描述| -|-------------------------------|--------------------------| -|模型中心 | 模型的crud| -|表格结构 | 表结构预览、表结构修改、表的字段维护等| -|表格数据 | 表的业务数据crud等| -|数据集市 | 可以快速构造查询sql,提供给外部接口、智能表单、数据分析等使用| -|创建数据集 | 数据集的设计、保存、预览数据等| - -![dm-table-struct](./docs/images/module/dm-table-struct.png) -![dm-table-data](./docs/images/module/dm-table-data.png) -![dm-sql-exec](./docs/images/module/dm-sql-exec.png) - -### 智能表单 -支持mdp-ui组件的拖拉拽,支持表单0编码0耗时发布形成一个新的功能 - -|功能 |描述| -|-------------------------------|--------------------------| -|表单中心 |表单列表,权限管理,数据查阅等 | -|创建表单 | 表单设计、预览| - -![formDesigner](./docs/images/module/form-designer.png) - -### 内容管理 -|功能 |描述| -|-------------------------------|--------------------------| -|附件库 | 附件上传、预览、权限配置等| -|图片库 | 图片上传、预览、删除等| -|图标库 | 图标的预览、选用等| - -![images](./docs/images/module/images-list.png) - -![icon](./docs/images/module/icon-list.png) - -### 订单管理 -|功能 |描述| -|-------------------------------|--------------------------| -|我的订单 | 订单查看、管理、打折促销等| -|购买产品 | 下单购买应用| -|增购人数 | 增加企业人数| -|续费 | 到期续费| - -![order](./docs/images/module/mall-order.png) - -### 第三方管理 -|功能 |描述| -|-------------------------------|--------------------------| -|邀请管理 | 查询、管理我发起的邀请| -|我邀请的用户 | 查询我邀请的用户列表| -|第三方用户查询 | 查询第三方账户信息 | - - -### 流程模型 -|功能 |描述| -|-------------------------------|--------------------------| -|流程编辑器 | 在线流程编辑器| -|模型发布 | 流程模型发布| -|模型设置 | 设置流程与智能表单的关联、模型的启动条件、审批人、权限等| - -![modelflow](./docs/images/module/modelflow.png) -![workflow-model-designer](./docs/images/module/workflow-model-designer.png) - -![workflow-model-assignee](./docs/images/module/workflow-task-assignee.png) -![workflow-model-form](./docs/images/module/workflow-task-form.png) - -### 审批中心 -|功能 |描述| -|-------------------------------|--------------------------| -|待执行 | 我的待执行任务查询、任务执行| -|日历任务 | 我的待执行任务查询、任务执行| -|发起流程 | 发起流程| +## 😭 日常项目管理中,您是否有以下痛点? +### 需求管控困难 +- 需求不明确:客户提出一些模糊的需求,这可能导致开发团队对需求的理解存在偏差。 +- 信息分散、杂乱:需求可能散落在多个地方,如邮件、Excel表格、即时通讯工具、不同的项目组等无法进行统一管理。 +- 需求追溯困难:提出者、评审者、实施人等不明确,导致责任不清、分工不明等问题产生。 +- 需求与开发脱节:无法实时跟踪需求完成情况。无法实时定位需求进度落后原因,进而无法做出补救措施。 +- 需求与测试不匹配:需求文档与测试用例不匹配导致测试工作无法顺利进行 +- 需求变更频发:频繁变更需求,给开发团队带来很大的困扰。 +### 任务管理困难 +- 任务分配不明确:任务通过口头或邮件形式进行分配,这可能导致任务责任不明确和任务重叠。 +- 任务发布、沟通困难:由于涉及的成员和部门众多,信息同步不及时,很容易导致项目协作混乱。 +- 任务进度把控难:缺乏有效的工具来跟踪任务进度,团队成员很难准确把握项目的整体完成情况,也无法针对性地进行调整。 +- 任务风险管理不充分:常常忽视任务风险管理,导致项目面临较大的风险。 +- 工时统计困难:手动记录工时不仅容易出错,而且难以统计和分析,这不仅影响团队成员的个人成果统计,也影响团队之间的凝聚力和协作效果。 -![workflow-task-detail](./docs/images/module/workflow-task-detail.png) -![workflow-task-action](./docs/images/module/workflow-task-action.png) -![workflow-task-ruli](./docs/images/module/workflow-task-ruli.png) -![workflow-task-start](./docs/images/module/workflow-task-start.png) +### 质量管理困难 +- 质量标准不明确:缺乏明确的质量标准和规范,导致团队成员对质量要求的理解存在差异,从而影响软件质量。 +- 质量保证不到位:导致软件存在缺陷和漏洞,影响用户体验和产品可靠性。 +- 测试不全面:缺乏缺陷登记跟踪工具、缺乏测试用例管理工具,导致一些潜在问题未被发现和解决,从而影响软件质量。 +- 质量管理与开发流程不融合:质量管理与开发流程相互分离,导致质量管理与开发效率相互影响,难以实现高效的软件开发。 -### 审批监控 -|功能 |描述| -|-------------------------------|--------------------------| -|我发起的流程 | 查询我发起的流程| -|我监控的流程 | 查询我监控的流程、催办| -|我参与的流程 | 查询我参与过的流程| +### 缺乏协作&沟通 +- 沟通渠道不统一:在开发团队中,不同的成员可能有不同的沟通渠道,导致信息分散,难以统一管理。 +- 沟通不够及时:在开发过程中,有时沟通不够及时,导致一些重要信息滞后的处理,影响了项目进度。 +- 沟通不够清晰:由于技术术语或背景知识的不同,团队成员之间的沟通有时不够清晰,导致理解上的偏差。 +- 沟通缺乏反馈机制:在沟通中,有时缺乏反馈机制,导致对问题的处理不够及时和有效。 -![monitorflow](./docs/images/module/monitorflow.png) +### 缺乏效能分析 +- 缺乏组织级、项目级、产品级、团队级、个人级、迭代级等不同组织级别的效能分析:企业在长期项目实施过程中,未构建起从组织级到个人级的效能分析体系,无法全面掌握企业的项目运作全貌,进而无法有效进行资源调配,利益最大化。 +- 缺乏对不同职能部门的多维度的效能分析 +- 缺乏风险预警、风险分析 +- 项目报告不全面、不准确 +- 质量报告不全面、不准确 +- 进度计划汇总、分解困难 -### 低代码 -|功能 |描述| -|-------------------------------|--------------------------| -|代码生成器 | 在线生成crud的前端页面代码(表单、表格、api),后端代码(控制层、服务层、dao层代码),前后端0修改即可正常运行 | +## 解决之道 +![解决之道](/docs/images/xm-jg/xm-1-jjzd.png) -### 界面风格切换 +### 系统概况 +![系统概况](/docs/images/xm-jg/xm-2-xtgk.png) -![black-style](./docs/images/module/black-style.png) +### 系统特点 +![系统特点](/docs/images/xm-jg/xm-3-xttd.png) -![black-branch-set](./docs/images/module/black-branch-set.png) +### 系统功能 +![系统功能](/docs/images/xm-jg/xm-4-xtgn.png) -![blackdept](./docs/images/module/blackdept.png) +### 技术架构 +![技术架构](/docs/images/xm-jg/xm-5-jsjg.png) -## ⚙ 组件库[mdp-ui](/src/components/mdp-ui) -mdp封装了几十个ui组件,使用mdp-ui与不使用mdp-ui的区别:写100行代码还是写1行代码的区别,代码量的减少立竿见影 -- [mdp-ui](/src/components/mdp-ui) -mdp的核心组件,该组件库为纯前端页面组件,无须配置任何后端api接口即可正确运行 -- [mdp-ui-ext](/src/components/mdp-ui-ext) -基于mdp-ui扩展的带有对接后台api业务加载能力的业务组件 +### 应用架构 +![应用架构](/docs/images/xm-jg/xm-6-yyjg.png) ->⚠️注意:先行体验一把[mdp-ui组件效果预览](https://maimengcloud.com/lcode/#/mdp/lcode/index) -### 非唛盟的子系统如何快速整合mdp-ui组件库 ->找到[main.ts](/src/main.ts) 添加下面代码 -```js +### 项目总体管理 +![项目总体管理](/docs/images/xm-jg/xm-8-ztgl.png) -//mdp-ui 基础组件 -import MdpComponents from '@/components/mdp-ui/index.js' -//mdp-ui-ext拓展的组件 -import MdpUiExtComponents from '@/components/mdp-ui-ext/index.js' -//唛盟公共api -import MdpPubApi from "@/api/mdp_pub"; -const app = createApp(App) +### 需求管理 +![需求管理](/docs/images/xm-jg/xm-9-xqgl.png) -app.use(MdpComponents) -app.use(MdpUiExtComponents) -app.config.globalProperties.$mdp=MdpPubApi -``` +### 项目计划 +![项目计划](/docs/images/xm-jg/xm-10-xmjh.png) -### [mdp-dialog](/src/components/mdp-ui/mdp-dialog) -弹框,可以把任意页面装配成弹框,无须定义多余的变量及函数 -- 相对于el-dialog来说,要使用弹窗,事情还真不少。需要定义visible变量,定义showDialog,closeDialog两个函数,最关键一点是如果要父页面传递参数到窗口内组件,还得在父页面定义一个变量,通过props属性传递。相当麻烦。如果某个功能弹窗特别多,会有一堆的控制弹窗的变量及函数,非常恶心。mdp-dialog则完全解决上述问题。 -### [mdp-table](/src/components/mdp-ui/mdp-table) -表格,内置了增、删、改、查、高级查询、重置查询、导出、列配置、分页、批量编辑等功能、内置了对按钮权限的控制机制 -功能非常强大,懂的都懂。 +### 质量管理 +![质量管理](/docs/images/xm-jg/xm-11-zlgl.png) -- 综合管理 -![综合管理表格](/docs/images/ui-components/table-mng.jpg) -- 可编辑表格 -![可编辑表格](/docs/images/ui-components/edit-table.jpg) -- 可编辑-树状表格 -![可编辑-树状表格](/docs/images/ui-components/left-right-tree-table.jpg) -### [mdp-select](/src/components/mdp-ui/mdp-select) -下拉列表,支持对数据字典、元数据的引用,支持对任意小表表格数据的引用,支持参数化加载后台数据,对后台加载的数据进行缓存 -![mdp-select](/docs/images/ui-components/select-origin.jpg) +### 迭代管理 +![迭代管理](/docs/images/xm-jg/xm-12-ddgl.png) -### [mdp-select-table](/src/components/mdp-ui/mdp-select-table) -超大表格下拉列表,与mdp-select相比,该组件具有分页查询功能 -![分页选择表格数据](/docs/images/ui-components/big-table-select.jpg) -### [mdp-select-user](/src/components/mdp-ui-ext/mdp-select-user) -用户选择下拉列表,与mdp-select-table组件类似,仅仅针对用户的头像做了特殊处理 -![用户选择](/docs/images/ui-components/select-user.jpg) +### 效能分析 +![效能分析](/docs/images/xm-jg/xm-13-xnfx.png) -### [mdp-input](/src/components/mdp-ui/mdp-input) -输入框 +## 💪 功能展示 +### 项目立项 +![项目立项](/docs/images/xm-zs/xm-zs-1-xmlx.png) -### [mdp-date](/src/components/mdp-ui/mdp-date) -日期 -### [mdp-date-range](/src/components/mdp-ui/mdp-date-range) -区间日期 +### 项目总体 +![项目总体](/docs/images/xm-zs/xm-zs-2-xmzt.png) -### [mdp-number](/src/components/mdp-ui/mdp-number) -数字输入 -### [mdp-hi-query](/src/components/mdp-ui/mdp-hi-query) -高级查询,可以由用户自定义任意复杂的查询条件 -![高级查询](/docs/images/ui-components/hi-query.jpg) +### 组织架构 +![组织架构](/docs/images/xm-zs/xm-zs-3-zzjg.png) -### [mdp-table-configs](/src/components/mdp-ui/mdp-table-configs) -表格配置,用于控制表格的列显示与否 -![表格配置列显示隐藏](/docs/images/ui-components/table-column-configs.jpg) -### [mdp-transfer](/src/components/mdp-ui/mdp-transfer) -穿梭框 +### 项目报告 +![项目报告](/docs/images/xm-zs/xm-zs-4-xmbg.png) -### [mdp-cate-tree](/src/components/mdp-ui-ext/mdp-cate-tree) -文档、文章目录树 -### [mdp-expand](/src/components/mdp-ui-ext/mdp-expand) -智能表单相关组件 +### 需求管理 +![需求管理](/docs/images/xm-zs/xm-zs-5-xqgl.png) -### [mdp-ext-infos](/src/components/mdp-ui-ext/mdp-ext-infos) -自动扩展字段信息 +### 用户故事 +![用户故事](/docs/images/xm-zs/xm-zs-6-yhgs.png) -### [mdp-image](/src/components/mdp-ui-ext/mdp-image) -图片库,图片的增删改查、上传、下载 -### [mdp-select-image](/src/components/mdp-ui-ext/mdp-select-image) -图片选择器,支持图片的上传下载、上传后的统一管理、共享 +### 项目计划 +![项目计划](/docs/images/xm-zs/xm-zs-7-xmjh.png) -### [mdp-select-dept](/src/components/mdp-ui-ext/mdp-select-dept) -部门选择,支持树状机构,异步加载,支持分页查询,任意大数据量 -### [mdp-select-att](/src/components/mdp-ui-ext/mdp-select-att) -附件库,支持附件的上传下载、上传后的统一管理、共享 +### 项目计划-任务 +![项目计划-任务](/docs/images/xm-zs/xm-zs-8-jhrw.png) -### [mdp-select-cate](/src/components/mdp-ui-ext/mdp-select-cate) -文档、文章目录树选择器 -### [mdp-select-tag](/src/components/mdp-ui-ext/mdp-select-tag) -标签库,支持标签的统一管理、共享 +### 迭代概览 +![迭代管理](/docs/images/xm-zs/xm-zs-9-ddgl.png) -### [mdp-meta-item](/src/components/mdp-ui-ext/[mdp-meta-item) -元数据管理库、支持元数据的crud +### 迭代维护 +![项目立项](/docs/images/xm-zs/xm-zs-10-ddwh.png) -### [mdp-meta-option](/src/components/mdp-ui-ext/mdp-meta-option) -元数据管理库-列表数据组件、支持列表数据的crud -### [mdp-rich-text](/src/components/mdp-ui-ext/mdp-rich-text) -富文本编辑器,整合了mdp-select-image作为插件 +### 测试管理 +![项目立项](/docs/images/xm-zs/xm-zs-11-csgl.png) -## 🔃 api -- [api](/src/api/) -业务api,哪里用到哪里就单独引入 -### [api/mdp_pub/index.js](/src/api/mdp_pub/index.js) -公共api总入口,注册到vue全局函数中,可以在页面中任意地方直接使用,公共api总入口,如需要添加公共api,请在此文件添加 -### [mdp_api_base.js](/src/api/mdp_pub/mdp_api_base.js) -为mdp框架核心的与后端交互的api,自动注册为全局公共函数,可通过$mdp.xxx调用,可改,但不要新增,删除任何一个api. -### [mdp_api_ext.js](/src/api/mdp_pub/mdp_api_ext.js) -为mdp扩展的组件与后端交互的api,自动注册为全局公共函数,可通过$mdp.xxx调用,可改,但不要新增,删除任何一个api. -### [mdp_api_biz.js](/src/api/mdp_pub/mdp_api_biz.js) -为mdp扩展的组件与后端交互的api,自动注册为全局公共函数,可通过$mdp.xxx调用,可改,可新增必要的api. -### [mdp_config.js](/src/api/mdp_pub/mdp_config.js) -前端工程的一些公共配置项,主要配置每一类api对接哪个后端微服务 -根据不同的环境,需要修改部分内容。mdp_config配置项已与vue3工程公共配置打通,vue3依赖于VIET_*的全局配置项,因此,vue3及更高版本之后应该以VITE的配置为准,详细查阅 [env.d.ts](/types/env.d.ts) +### 测试报告 +![项目立项](/docs/images/xm-zs/xm-zs-12-csbg.png) -```js +### 缺陷管理 +![项目立项](/docs/images/xm-zs/xm-zs-13-qxgl.png) -# 固定网址 -VITE_FIXED_DOMAIN=https://www.maimengcloud.com +### 财务费用 +![项目立项](/docs/images/xm-zs/xm-zs-14-cwfy.png) -# 开源项目地址 -VITE_OPEN_SOURCE_LINK=https://gitee.com/qingqinkj218/collections/375320 +### 驾驶舱 +![项目立项](/docs/images/xm-zs/xm-zs-15-jsc.png) -# 微信开放平台 appid -VITE_WXOPEN_APPID=wx2671d5db8346b6fc +### 效能分析 +![项目立项](/docs/images/xm-zs/xm-zs-16-xnfx.png) -# -# 说明: VITE_CTX_# 为定义唛盟各个子系统的context; -# context指向子系统的微服务名称,spring.application.name -# -# 1. 用于前端请求路径前缀映射, -# 前端页面一般部署在 ./{VITE_CONTEXT}/{VITE_UI_VERSION?} -# -# 2. api导航到对应子系统等 -# api一般按以下格式规范组装 ./{VITE_API_BASE_PATH}/{VITE_API_VERSION}/{VITE_CONTEXT} -# +### 燃尽图 +![项目立项](/docs/images/xm-zs/xm-zs-17-rjt.png) -# 登录相关,如果后端启用oauth2,则返回 oauth2client ,如果后端不启用oauth2,后端账户使用mdp-lcode服务,则返回 lcode ,如果使用mdp-sys提供服务,则返回sys -VITE_CTX_LOGIN=oauth2client +### 每日工作项分布 +![项目立项](/docs/images/xm-zs/xm-zs-18-gzxfb.png) -# 项目管理子系统 -VITE_CTX_XM=xm +### 任务年龄分布 +![项目立项](/docs/images/xm-zs/xm-zs-19-rwnlfb.png) -# 工作流子系统,由于flowable启动限制,目前不支持jar集成到lcode,需要单独部署 -VITE_CTX_WF=workflow +### 任务排行棒 +![项目立项](/docs/images/xm-zs/xm-zs-20-rwphb.png) -# 低代码子系统 -VITE_CTX_LCODE=lcode +### 测试用例规划分析 +![项目立项](/docs/images/xm-zs/xm-zs-21-csylghfx.png) -# 内容管理子系统 -VITE_CTX_ARC=arc +## 客户端展示 +### 小程序 +![项目立项](/docs/images/xm-zs/xm-zs-22-xcx.png) -# 数据模型 由lcode接管 -VITE_CTX_DM=lcode +### 审批管理 +![项目立项](/docs/images/xm-zs/xm-zs-23-spgl.png) -# 协同办公 -VITE_CTX_OA=oa - -# 系统管理,目前由lcode接管 -VITE_CTX_SYS=lcode - -# 智能表单,目前由lcode接管 -VITE_CTX_FORM=lcode - -# 商城-面向消费用户端 -VITE_CTX_MALL=mall - -# 商城管理端 -VITE_CTX_MALLM=mallm - -# 即时通讯 -VITE_CTX_IM=im - -# 短信 -VITE_CTX_SMS=sms - -# 唛盟内置的应用购买模块订单 目前由lcode接管 -VITE_CTX_MO=lcode - -# 众包 目前由xm接管 -VITE_CTX_CROWD=xm - -# 第三方集成系统 -VITE_CTX_TPA=tpa -``` - - -#### api的调用方法 -```html - -``` -```js - //选项式 - this.$mdp.xxxApi() - - //组合式 由于没有this,需要在顶部引入proxy - const {proxy}: any = getCurrentInstance() - proxy.$mdp.xxxApi() -``` - -- [login](/src/api/login/index.ts.ts) -登录相关api - -## 🔃 指令 -- [v-adaptive](./src/components/mdp-ui/directive/adaptive.ts) -让表格、div等自动适应,底部始终保持距离视窗底部一定距离(默认 30px) - -```html - - - -``` +### 测试管理 +![项目立项](/docs/images/xm-zs/xm-zs-24-csgl.png) ## 💻 样例项目 -- [低代码平台] (https://maimengcloud.com/lcode/) -- [系统管理] (https://maimengcloud.com/sys) +- [低代码平台] (https://maimengcloud.com/lcode/) - [协同办公] (https://maimengcloud.com/oa) -- [项目管理] (https://maimengcloud.com/xm) -- [流程管理] (https://maimengcloud.com/wf) +- [项目管理] (https://maimengcloud.com/xm) ## ⚙ 快速开始 @@ -649,14 +308,11 @@ pnpm install 包 // 安装依赖 ### 前序准备 -- 当前项目属于网页版前端ui项目,后端代码请移步到 [mdp-lcode-backend](https://gitee.com/maimengcloud/mdp-lcode-backend) - -- 代码生成器下载 [mdp-code-generator](https://gitee.com/maimengcloud/mdp-code-generator) 也可以在低代码平台在线生成 - +- 当前项目属于网页版前端ui项目,后端代码请移步到 [xm-backend](https://gitee.com/maimengcloud/xm-backend) ### 开发 ```bash # 克隆项目 -git clone https://gitee.com/maimengcloud/mdp-lcode-ui-web.git +git clone https://gitee.com/maimengcloud/xm-ui-web.git # 安装依赖 pnpm install @@ -664,7 +320,7 @@ pnpm install # 启动服务 pnpm run dev ``` -浏览器访问 http://localhost:8015 +浏览器访问 http://localhost:8067 #### 登录相关 登录api,对接后台接口有两种方式: @@ -713,8 +369,16 @@ pnpm run dev changeOrigin: true, rewrite: (path) => path.replace(new RegExp(`^/api/m1/lcode`), '/'), }, + + ['/api/m1/xm']: { + target: 'http://localhost:7067', + ws: false, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^/api/m1/xm`), '/'), + }, ``` -上述代理实现把以/api/m1/lcode开头的请求地址(举例/api/m1/lcode/user/list)替换为/user/list,并转发到http://localhost:7014地址 +上述代理实现把以/api/m1/lcode 开头的请求地址(举例/api/m1/lcode/user/list)替换为/user/list,并转发到http://localhost:7014地址 +上述代理实现把以/api/m1/xm 开头的请求地址(举例/api/m1/xm/user/list)替换为/user/list,并转发到http://localhost:7067地址 2. 只启动前端页面工程,后端工程不启动,后端工程使用服务器上的已启动的服务 此种情况下前端如何把请求转发到服务上起的后端服务?主要修改[vite.config.js](vite.config.ts)中的代理实现 @@ -725,8 +389,14 @@ pnpm run dev changeOrigin: true, rewrite: (path) => path.replace(new RegExp(`^/api/m1/lcode`), '/'), }, + + ['/api/m1/xm']: { + target: '服务器上的ip:7067', + ws: false, + changeOrigin: true, + rewrite: (path) => path.replace(new RegExp(`^/api/m1/xm`), '/'), + }, ``` -上述代理实现把以/api/m1/lcode开头的请求地址(举例/api/m1/lcode/user/list)替换为/user/list,并转发到http://服务器上的ip:7014地址 ### 构建 @@ -740,11 +410,11 @@ pnpm run build:prod ### 发布 假设: -1. 应用服务器(sit1-backend),ip为192.168.0.222,端口7014 +1. 应用服务器(sit1-backend),ip为192.168.0.222,端口7067 2. 静态资源服务器(sit1-static),ip为192.168.0.111 3. 反向代理使用nginx -4. 静态资源部署到服务器sit1-static的/data/nginx/html/lcode/下 -5. 本地*ui-web目录在C:/Users/xxx/IdeaProjects/mdp-lcode-ui-web/ +4. 静态资源部署到服务器sit1-static的/data/nginx/html/xm/下 +5. 本地*ui-web目录在C:/Users/xxx/IdeaProjects/xm-ui-web/ #### 发布静态资源到测试\生产环境 @@ -759,7 +429,7 @@ rm -rf dist.rar # 2.执行rz命令,弹框选择本地dist文件上传到sit1-static服务器 rz -# 3.在弹出的目录选择器中进入C:\Users\xxx\IdeaProjects\mdp-lcode-ui-web\dist\目录下 +# 3.在弹出的目录选择器中进入C:\Users\xxx\IdeaProjects\xm-ui-web\dist\目录下 全选所有文件->右键->添加到dist.rar->选中dist.rar->上传到服务器商/data/nginx/html/lcode/目录下 # 4.执行解压缩命令,至此静态资源发布完成 @@ -839,7 +509,7 @@ unrar x dist.rar ``` #### 发布后端服务 -具体以[mdp-lcode-backend](https://gitee.com/maimengcloud/mdp-lcode-backend)中发布描述为准 +具体以[xm-backend](https://gitee.com/maimengcloud/xm-backend)中发布描述为准 ### 运维 #### 日志查询 @@ -881,10 +551,10 @@ consule 的默认控制台 http://ip:8500/ #### 有时候微服务需要人为干预进行下架 -可以调用[/bin/service-deregister.sh](https://gitee.com/maimengcloud/mdp-lcode-backend/blob/master/bin/service-deregister.sh)进行 +可以调用[/bin/service-deregister.sh](https://gitee.com/maimengcloud/xm-backend/blob/master/bin/service-deregister.sh)进行 #### 日志定时备份清理 -可以在crontab中配置定时任务,定时调用[bin/clear-log.sh](https://gitee.com/maimengcloud/mdp-lcode-backend/blob/master/bin/clear-log.sh)即可完成7天循环自动清理及备份日志 +可以在crontab中配置定时任务,定时调用[bin/clear-log.sh](https://gitee.com/maimengcloud/xm-backend/blob/master/bin/clear-log.sh)即可完成7天循环自动清理及备份日志 使用举例: ```bash @@ -971,7 +641,7 @@ pnpm config set registry https://registry.npmmirror.com/ #### 数据库脚本在哪? 答复: 数据库脚本一般存放在后端工程下的sql/文件夹下 -低代码的[mdp-lcode-backend/mdp-lcode/sql/lcode.sql](https://gitee.com/maimengcloud/mdp-lcode-backend/tree/master/mdp-lcode/sql) +低代码的[xm-backend/xm/sql/lcode.sql](https://gitee.com/maimengcloud/xm-backend/tree/master/xm/sql) #### 数据库的编码是什么? mysql的话,建议character set: utf8mb4, collation: utf8mb4_croatian_ci @@ -1102,13 +772,13 @@ VITE_MODULE_SCOPE=['模块编号1','模块编号2'] ## 💯 实践案例 1. [低代码平台](https://maimengcloud.com/lcode) -1. [系统管理](https://maimengcloud.com/sys) +1. [系统管理](https://maimengcloud.com/lcode) 2. [协同办公](https://maimengcloud.com/oa) 3. [唛盟众包-网页](https://maimengcloud.com) 3. [项目管理-网页](https://maimengcloud.com/xm) 4. 项目管理-小程序 drawing -5. [流程管理](https://maimengcloud.com/workflow/) +5. [流程管理](https://maimengcloud.com/lcode/) ### 项目分支说明 diff --git a/docs/images/xm-jg/xm-1-jjzd.png b/docs/images/xm-jg/xm-1-jjzd.png new file mode 100644 index 00000000..8cf202eb Binary files /dev/null and b/docs/images/xm-jg/xm-1-jjzd.png differ diff --git a/docs/images/xm-jg/xm-10-xmjh.png b/docs/images/xm-jg/xm-10-xmjh.png new file mode 100644 index 00000000..73536349 Binary files /dev/null and b/docs/images/xm-jg/xm-10-xmjh.png differ diff --git a/docs/images/xm-jg/xm-11-zlgl.png b/docs/images/xm-jg/xm-11-zlgl.png new file mode 100644 index 00000000..7463ce29 Binary files /dev/null and b/docs/images/xm-jg/xm-11-zlgl.png differ diff --git a/docs/images/xm-jg/xm-12-ddgl.png b/docs/images/xm-jg/xm-12-ddgl.png new file mode 100644 index 00000000..e840a3b4 Binary files /dev/null and b/docs/images/xm-jg/xm-12-ddgl.png differ diff --git a/docs/images/xm-jg/xm-13-xnfx.png b/docs/images/xm-jg/xm-13-xnfx.png new file mode 100644 index 00000000..6ed2a4ae Binary files /dev/null and b/docs/images/xm-jg/xm-13-xnfx.png differ diff --git a/docs/images/xm-jg/xm-2-xtgk.png b/docs/images/xm-jg/xm-2-xtgk.png new file mode 100644 index 00000000..78b79a76 Binary files /dev/null and b/docs/images/xm-jg/xm-2-xtgk.png differ diff --git a/docs/images/xm-jg/xm-3-xttd.png b/docs/images/xm-jg/xm-3-xttd.png new file mode 100644 index 00000000..9393bf33 Binary files /dev/null and b/docs/images/xm-jg/xm-3-xttd.png differ diff --git a/docs/images/xm-jg/xm-4-xtgn.png b/docs/images/xm-jg/xm-4-xtgn.png new file mode 100644 index 00000000..8480c3fb Binary files /dev/null and b/docs/images/xm-jg/xm-4-xtgn.png differ diff --git a/docs/images/xm-jg/xm-5-jsjg.png b/docs/images/xm-jg/xm-5-jsjg.png new file mode 100644 index 00000000..e8b6c0be Binary files /dev/null and b/docs/images/xm-jg/xm-5-jsjg.png differ diff --git a/docs/images/xm-jg/xm-6-yyjg.png b/docs/images/xm-jg/xm-6-yyjg.png new file mode 100644 index 00000000..20262a98 Binary files /dev/null and b/docs/images/xm-jg/xm-6-yyjg.png differ diff --git a/docs/images/xm-jg/xm-7-xtzs.png b/docs/images/xm-jg/xm-7-xtzs.png new file mode 100644 index 00000000..15aee278 Binary files /dev/null and b/docs/images/xm-jg/xm-7-xtzs.png differ diff --git a/docs/images/xm-jg/xm-8-ztgl.png b/docs/images/xm-jg/xm-8-ztgl.png new file mode 100644 index 00000000..23835158 Binary files /dev/null and b/docs/images/xm-jg/xm-8-ztgl.png differ diff --git a/docs/images/xm-jg/xm-9-xqgl.png b/docs/images/xm-jg/xm-9-xqgl.png new file mode 100644 index 00000000..58b47895 Binary files /dev/null and b/docs/images/xm-jg/xm-9-xqgl.png differ diff --git a/docs/images/xm-price/module-price.png b/docs/images/xm-price/module-price.png new file mode 100644 index 00000000..29958071 Binary files /dev/null and b/docs/images/xm-price/module-price.png differ diff --git a/docs/images/xm-price/service-price.png b/docs/images/xm-price/service-price.png new file mode 100644 index 00000000..574fd3d9 Binary files /dev/null and b/docs/images/xm-price/service-price.png differ diff --git a/docs/images/xm-zs/xm-zs-1-xmlx.png b/docs/images/xm-zs/xm-zs-1-xmlx.png new file mode 100644 index 00000000..9993eae0 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-1-xmlx.png differ diff --git a/docs/images/xm-zs/xm-zs-10-ddwh.png b/docs/images/xm-zs/xm-zs-10-ddwh.png new file mode 100644 index 00000000..fc90b4e3 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-10-ddwh.png differ diff --git a/docs/images/xm-zs/xm-zs-11-csgl.png b/docs/images/xm-zs/xm-zs-11-csgl.png new file mode 100644 index 00000000..0d8494b8 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-11-csgl.png differ diff --git a/docs/images/xm-zs/xm-zs-12-csbg.png b/docs/images/xm-zs/xm-zs-12-csbg.png new file mode 100644 index 00000000..3107eff1 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-12-csbg.png differ diff --git a/docs/images/xm-zs/xm-zs-13-qxgl.png b/docs/images/xm-zs/xm-zs-13-qxgl.png new file mode 100644 index 00000000..4032dfb4 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-13-qxgl.png differ diff --git a/docs/images/xm-zs/xm-zs-14-cwfy.png b/docs/images/xm-zs/xm-zs-14-cwfy.png new file mode 100644 index 00000000..87d83d93 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-14-cwfy.png differ diff --git a/docs/images/xm-zs/xm-zs-15-jsc.png b/docs/images/xm-zs/xm-zs-15-jsc.png new file mode 100644 index 00000000..173b502e Binary files /dev/null and b/docs/images/xm-zs/xm-zs-15-jsc.png differ diff --git a/docs/images/xm-zs/xm-zs-16-xnfx.png b/docs/images/xm-zs/xm-zs-16-xnfx.png new file mode 100644 index 00000000..7a472838 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-16-xnfx.png differ diff --git a/docs/images/xm-zs/xm-zs-17-rjt.png b/docs/images/xm-zs/xm-zs-17-rjt.png new file mode 100644 index 00000000..3b786da2 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-17-rjt.png differ diff --git a/docs/images/xm-zs/xm-zs-18-gzxfb.png b/docs/images/xm-zs/xm-zs-18-gzxfb.png new file mode 100644 index 00000000..f555924b Binary files /dev/null and b/docs/images/xm-zs/xm-zs-18-gzxfb.png differ diff --git a/docs/images/xm-zs/xm-zs-19-rwnlfb.png b/docs/images/xm-zs/xm-zs-19-rwnlfb.png new file mode 100644 index 00000000..b3c2af22 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-19-rwnlfb.png differ diff --git a/docs/images/xm-zs/xm-zs-2-xmzt.png b/docs/images/xm-zs/xm-zs-2-xmzt.png new file mode 100644 index 00000000..c1abc6c1 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-2-xmzt.png differ diff --git a/docs/images/xm-zs/xm-zs-20-rwphb.png b/docs/images/xm-zs/xm-zs-20-rwphb.png new file mode 100644 index 00000000..33884a50 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-20-rwphb.png differ diff --git a/docs/images/xm-zs/xm-zs-21-csylghfx.png b/docs/images/xm-zs/xm-zs-21-csylghfx.png new file mode 100644 index 00000000..67d6d967 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-21-csylghfx.png differ diff --git a/docs/images/xm-zs/xm-zs-22-xcx.png b/docs/images/xm-zs/xm-zs-22-xcx.png new file mode 100644 index 00000000..f6801025 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-22-xcx.png differ diff --git a/docs/images/xm-zs/xm-zs-23-spgl.png b/docs/images/xm-zs/xm-zs-23-spgl.png new file mode 100644 index 00000000..285e99ea Binary files /dev/null and b/docs/images/xm-zs/xm-zs-23-spgl.png differ diff --git a/docs/images/xm-zs/xm-zs-24-csgl.png b/docs/images/xm-zs/xm-zs-24-csgl.png new file mode 100644 index 00000000..9bcea802 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-24-csgl.png differ diff --git a/docs/images/xm-zs/xm-zs-3-zzjg.png b/docs/images/xm-zs/xm-zs-3-zzjg.png new file mode 100644 index 00000000..5a8bd94f Binary files /dev/null and b/docs/images/xm-zs/xm-zs-3-zzjg.png differ diff --git a/docs/images/xm-zs/xm-zs-4-xmbg.png b/docs/images/xm-zs/xm-zs-4-xmbg.png new file mode 100644 index 00000000..e8d3ee21 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-4-xmbg.png differ diff --git a/docs/images/xm-zs/xm-zs-5-xqgl.png b/docs/images/xm-zs/xm-zs-5-xqgl.png new file mode 100644 index 00000000..781df5dc Binary files /dev/null and b/docs/images/xm-zs/xm-zs-5-xqgl.png differ diff --git a/docs/images/xm-zs/xm-zs-6-yhgs.png b/docs/images/xm-zs/xm-zs-6-yhgs.png new file mode 100644 index 00000000..83747607 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-6-yhgs.png differ diff --git a/docs/images/xm-zs/xm-zs-7-xmjh.png b/docs/images/xm-zs/xm-zs-7-xmjh.png new file mode 100644 index 00000000..212f00c3 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-7-xmjh.png differ diff --git a/docs/images/xm-zs/xm-zs-8-jhrw.png b/docs/images/xm-zs/xm-zs-8-jhrw.png new file mode 100644 index 00000000..6b540d2e Binary files /dev/null and b/docs/images/xm-zs/xm-zs-8-jhrw.png differ diff --git a/docs/images/xm-zs/xm-zs-9-ddgl.png b/docs/images/xm-zs/xm-zs-9-ddgl.png new file mode 100644 index 00000000..4745bdf4 Binary files /dev/null and b/docs/images/xm-zs/xm-zs-9-ddgl.png differ diff --git a/src/api/mdp_pub/larc.js b/src/api/mdp_pub/larc.js index 8570de59..4f548786 100644 --- a/src/api/mdp_pub/larc.js +++ b/src/api/mdp_pub/larc.js @@ -105,6 +105,8 @@ export const editCategory = params => { return axios.post(`/${arcBase}/mdp/arc/ //新增一条档案类目 export const addCategory = params => { return axios.post(`/${arcBase}/mdp/arc/pub/category/add`, params); } +export const batchChangeParent= params => { return axios.post(`/${arcBase}/mdp/arc/pub/category/batchChangeParent`, params); } + //查询分类权限 export const listCategoryQx = params => { return axios.get(`/${arcBase}/mdp/arc/pub/categoryQx/list`, { params: params }); } diff --git a/src/api/mdp_pub/mdp_api_ext.js b/src/api/mdp_pub/mdp_api_ext.js index ee48726b..8b3ba2ea 100644 --- a/src/api/mdp_pub/mdp_api_ext.js +++ b/src/api/mdp_pub/mdp_api_ext.js @@ -65,6 +65,8 @@ addDept: params => { return axios.post(`/${sysBase}/mdp/sys/dept/add`, params ) editDept: params => { return axios.post(`/${sysBase}/mdp/sys/dept/edit`, params ); }, delDept: params => { return axios.post(`/${sysBase}/mdp/sys/dept/del`, params ); }, +batchChangeDeptParent: params => { return axios.post(`/${sysBase}/mdp/sys/dept/batchChangeParent`, params ); }, + /** * 角色列表 diff --git a/src/api/xm/core/xmFunc.js b/src/api/xm/core/xmFunc.js index ef27d0b4..2873973f 100644 --- a/src/api/xm/core/xmFunc.js +++ b/src/api/xm/core/xmFunc.js @@ -27,6 +27,10 @@ export const editXmFunc = params => { return axios.post(`${base}/xm/core/xmFunc/ //新增一条功能模块表 export const addXmFunc = params => { return axios.post(`${base}/xm/core/xmFunc/add`, params); }; + +//批量更新上级 +export const batchChangeParent = params => { return axios.post(`${base}/xm/core/xmFunc/batchChangeParent`, params); }; + //批量修改某些字段 export const editSomeFieldsXmFunc = params => { return axios.post(`${base}/xm/core/xmFunc/editSomeFields`, params); }; diff --git a/src/api/xm/pro/xmBudgetNlabor.js b/src/api/xm/pro/xmBudgetNlabor.js deleted file mode 100644 index b03244c3..00000000 --- a/src/api/xm/pro/xmBudgetNlabor.js +++ /dev/null @@ -1,37 +0,0 @@ -import axios from '@/config/maxios' - - -import config from '@/api/mdp_pub/mdp_config' - -let base = config.getXmCtx(); - -/**-------------------------与后端通讯接口------------------请写在下面-------------------------------------------- */ -/** - * 项目人力成本预算 - *1 默认只开放普通查询,所有查询,只要上传 分页参数 {pageNum:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉, - *2 查询、新增、修改的参数格式 params={id:'主键 主键',projectId:'项目编号',budgetAt:'预算金额',remark:'备注',subjectId:'预算科目',bizSdate:'费用归属周期开始日期',bizEdate:'费用归属周期结束日期',instId:'当前流程实例编号',bizFlowState:'当前流程状态0初始1审批中2审批通过3审批不通过4流程取消或者删除',costType:'成本类型0非人力1内部人力2外购人力',bizMonth:'费用归属月份yyyy-MM',subjectName:'科目名称',branchId:'项目归属企业编号'} - **/ - -//普通查询 条件之间and关系 -export const listXmBudgetNlabor = params => { return axios.get(`${base}/xm/core/xmBudgetNlabor/list`, { params: params }); }; - -//删除一条项目人力成本预算 params={id:'主键 主键'} -export const delXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/del`,params); }; - -//批量删除项目人力成本预算 params=[{id:'主键 主键'}] -export const batchDelXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/batchDel`, params); }; - -//批量新增项目人力成本预算 params=[{id:'主键 主键'}] -export const batchAddXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/batchAdd`, params); }; - -//修改一条项目人力成本预算记录 -export const editXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/edit`, params); }; - -//新增一条项目人力成本预算 -export const addXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/add`, params); }; - -//批量修改某些字段 -export const editSomeFieldsXmBudgetNlabor = params => { return axios.post(`${base}/xm/core/xmBudgetNlabor/editSomeFields`, params); }; - - -export const listSumXmBudgetNlabor = params => { return axios.get(`${base}/xm/core/xmBudgetNlabor/listSum`, { params: params }); }; diff --git a/src/api/xm/pro/xmBudgetLabor.js b/src/api/xm/pro/xmBudgetRecord.js similarity index 59% rename from src/api/xm/pro/xmBudgetLabor.js rename to src/api/xm/pro/xmBudgetRecord.js index fda3b203..b0f51d1c 100644 --- a/src/api/xm/pro/xmBudgetLabor.js +++ b/src/api/xm/pro/xmBudgetRecord.js @@ -13,25 +13,26 @@ let base = config.getXmCtx(); **/ //普通查询 条件之间and关系 -export const listXmBudgetLabor = params => { return axios.get(`${base}/xm/core/xmBudgetLabor/list`, { params: params }); }; +export const listXmBudgetRecord = params => { return axios.get(`${base}/xm/core/xmBudgetRecord/list`, { params: params }); }; //删除一条项目人力成本预算 params={id:'主键 主键'} -export const delXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/del`,params); }; +export const delXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/del`,params); }; //批量删除项目人力成本预算 params=[{id:'主键 主键'}] -export const batchDelXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/batchDel`, params); }; +export const batchDelXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/batchDel`, params); }; //批量新增项目人力成本预算 params=[{id:'主键 主键'}] -export const batchAddXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/batchAdd`, params); }; +export const batchAddXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/batchAdd`, params); }; //修改一条项目人力成本预算记录 -export const editXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/edit`, params); }; +export const editXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/edit`, params); }; //新增一条项目人力成本预算 -export const addXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/add`, params); }; +export const addXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/add`, params); }; //批量修改某些字段 -export const editSomeFieldsXmBudgetLabor = params => { return axios.post(`${base}/xm/core/xmBudgetLabor/editSomeFields`, params); }; +export const editSomeFieldsXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/editSomeFields`, params); }; -export const listSumXmBudgetLabor = params => { return axios.get(`${base}/xm/core/xmBudgetLabor/listSum`, { params: params }); }; - \ No newline at end of file +export const listSumXmBudgetRecord = params => { return axios.get(`${base}/xm/core/xmBudgetRecord/listSum`, { params: params }); }; + //拆分一条项目人力成本预算 +export const splitXmBudgetRecord = params => { return axios.post(`${base}/xm/core/xmBudgetRecord/split`, params); }; diff --git a/src/api/xm/pro/xmCostNlabor.js b/src/api/xm/pro/xmCostRecord.js similarity index 66% rename from src/api/xm/pro/xmCostNlabor.js rename to src/api/xm/pro/xmCostRecord.js index 0004ff7f..d7dfbc77 100644 --- a/src/api/xm/pro/xmCostNlabor.js +++ b/src/api/xm/pro/xmCostRecord.js @@ -13,23 +13,23 @@ let base = config.getXmCtx(); **/ //普通查询 条件之间and关系 -export const listXmCostNlabor = params => { return axios.get(`${base}/xm/core/xmCostNlabor/list`, { params: params }); }; +export const listXmCostRecord = params => { return axios.get(`${base}/xm/core/xmCostRecord/list`, { params: params }); }; //删除一条项目实际人工成本费用 params={id:'主键 主键'} -export const delXmCostNlabor = params => { return axios.post(`${base}/xm/core/xmCostNlabor/del`,params); }; +export const delXmCostRecord = params => { return axios.post(`${base}/xm/core/xmCostRecord/del`,params); }; //批量删除项目实际人工成本费用 params=[{id:'主键 主键'}] -export const batchDelXmCostNlabor = params => { return axios.post(`${base}/xm/core/xmCostNlabor/batchDel`, params); }; +export const batchDelXmCostRecord = params => { return axios.post(`${base}/xm/core/xmCostRecord/batchDel`, params); }; //修改一条项目实际人工成本费用记录 -export const editXmCostNlabor = params => { return axios.post(`${base}/xm/core/xmCostNlabor/edit`, params); }; +export const editXmCostRecord = params => { return axios.post(`${base}/xm/core/xmCostRecord/edit`, params); }; //新增一条项目实际人工成本费用 -export const addXmCostNlabor = params => { return axios.post(`${base}/xm/core/xmCostNlabor/add`, params); }; +export const addXmCostRecord = params => { return axios.post(`${base}/xm/core/xmCostRecord/add`, params); }; //批量修改某些字段 -export const editSomeFieldsXmCostNlabor = params => { return axios.post(`${base}/xm/core/xmCostNlabor/editSomeFields`, params); }; +export const editSomeFieldsXmCostRecord = params => { return axios.post(`${base}/xm/core/xmCostRecord/editSomeFields`, params); }; //普通查询 条件之间and关系 -export const listSumXmCostNlabor = params => { return axios.get(`${base}/xm/core/xmCostNlabor/listSum`, { params: params }); }; +export const listSumXmCostRecord = params => { return axios.get(`${base}/xm/core/xmCostRecord/listSum`, { params: params }); }; diff --git a/src/components/mdp-ui-ext/index.js b/src/components/mdp-ui-ext/index.js index 94b3b1f4..45d57caa 100644 --- a/src/components/mdp-ui-ext/index.js +++ b/src/components/mdp-ui-ext/index.js @@ -15,7 +15,8 @@ import MdpFormData from './mdp-expand/FormData.vue' import MdpFormExpand from './mdp-expand/FormExpand.vue' import MdpColumnExpand from './mdp-expand/ColumnExpand.vue' import MdpFuncMenu from './mdp-func-menu/Index.vue' -import MdpFocus from './mdp-focus/Index.vue' +import MdpFocus from './mdp-focus/Index.vue' +import MdpSelectBranch from './mdp-select-branch/Index.vue' const compLists = { install: function(Vue) { @@ -38,6 +39,7 @@ const compLists = { Vue.component('MdpColumnExpand', MdpColumnExpand) Vue.component('MdpFuncMenu',MdpFuncMenu) Vue.component('MdpFocus',MdpFocus) + Vue.component('MdpSelectBranch',MdpSelectBranch) } } export default compLists \ No newline at end of file diff --git a/src/components/mdp-ui-ext/mdp-cate-tree/Index.vue b/src/components/mdp-ui-ext/mdp-cate-tree/Index.vue index b34320a4..696c015f 100644 --- a/src/components/mdp-ui-ext/mdp-cate-tree/Index.vue +++ b/src/components/mdp-ui-ext/mdp-cate-tree/Index.vue @@ -1,235 +1,178 @@ -