diff --git a/README.md b/README.md index 6ea799a61b174b978613fea1a35e6e5c67b65ba1..24c493bb632daaf851e7026e2fc6ce3ed1c565f4 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,42 @@ ## 📢 简介[唛盟低代码开发平台mdp-lcode](/) 唛盟低代码开发平台简称唛盟或者mdp. 唛盟旨在为企业开发业务系统提供一整套解决方案,唛盟具有高效率、低代码、功能丰富等特点。企业可以在唛盟工程之上,加入更多其它业务功能;也可以以唛盟作为模板,创建新的工程,用于开发其它业务。使用唛盟构建应用,您不用考虑多租户、登录、统一认证中心、权限、菜单管理、系统管理、公共组件、公共api、代码冗余、数据字典、图片库、文件库、智能表单、工作流、微服务互相调用、全局跟踪定位bug、多主键crud,复杂sql查询等各种问题,这些问题的解决方案都作为扩展功能内置唛盟工程中了。 -💪给你一个使用唛盟的理由:代码大量减少、开发so easy、前后端MIT协议、全部开源、永久免费 +💪给你一个使用唛盟的理由:代码大量减少、开发so easy、前后端MIT协议、全部开源、永久免费 +💪唛盟生态遵循 “一个底座+N个专业子系统” 的架构,基于同一个底座的各个专业子系统可以任意组合形成一个大的业务系统 +一个底座: [mdp-core](https://gitee.com/maimengcloud/mdp-core) +N个专业子系统: [低代码mdp-lcode](https://gitee.com/maimengcloud/mdp-lcode-ui-web)、[系统及账户管理mdp-sys](https://gitee.com/maimengcloud/mdp-sys-backend)、 +[第三方支付登录等mdp-tpa](https://gitee.com/maimengcloud/mdp-tpa-backend)、 +[统一认证中心mdp-oauth2](https://gitee.com/maimengcloud/mdp-oauth2-backend)、 +[内容管理mdp-arc](https://gitee.com/maimengcloud/mdp-arc-ui-web)、 +[工作流mdp-workflow](https://gitee.com/maimengcloud/mdp-workflow-backend)、 +[短信mdp-sms](https://gitee.com/maimengcloud/mdp-sms-ui-web)、 +[代码生成器mdp-code](https://gitee.com/maimengcloud/mdp-code-generator) 、 +[研发项目管理xm](https://gitee.com/maimengcloud/xm-ui-web)、 +[即时通讯mdp-im](https://gitee.com/maimengcloud/mdp-im-web)、 +[财务ac](https://gitee.com/maimengcloud/ac-core-ui-web)、 +[协同办公oa](https://gitee.com/maimengcloud/oa-ui-web) +上述专业子系统全部开源 + +## 📢工程介绍 + +>⚠️工程分类:主体工程、基础配套工程、高级配套工程、拓展应用工程、辅助开发工具五大类。 +> 主体工程:本系统业务工程,用于书写本系统相关的业务代码; +> 基础配套工程:业务工程运行所需的必要工程;如开发底座,系统管理相关功能包 +> 高级配套工程:高级应用,比如需要将业务工程接入oauth2环境、将业务工程发布到cloud环境,才需要下载安装高级配套工程 +> 拓展应用工程: 基于唛盟低代码平台拓展的应用工程,其后端可以单体发布,也可以以微服务方式发布,也可以打成jar被唛盟其它应用引入 +> 辅助开发工具:指开发用到的一些工具 + +>⚠️工程命名规范:业务名称+工程属性 +> 工程属性如下: +> -ui: 页面工程 +> -web: pc端运行的浏览器工程 +> -backend: 后端服务 +> -app: 安卓、ios等原生app工程 +> -uniapp: 基于uniapp开发的应用 +> -minapp: 小程序 +> -cloud: 微服务cloud环境 +> -oauth2: 统一认证中心 +> -bootstrap: 打包部署工程 ### 唛盟主体工程 唛盟属于前后端严格分离的一套系统,分为前端工程、后端工程两部分 @@ -35,26 +70,29 @@ - [mdp-lcode-backend](https://gitee.com/maimengcloud/mdp-lcode-backend) 唛盟的后端工程,java语言为主 -### 配套工程 -- [mdp-code-generator](https://gitee.com/maimengcloud/mdp-code-generator) 代码生成器 -生成代码两种方式, -一、使用代码生成器本地工程,好处是代码可以直接覆盖到本地业务工程,避免复制黏贴出错。 -二、如果不需要本地生成代码,也可以在低代码平台在线生成。[在线生成代码](https://maimengcloud.com/lcode/m1/#/mdp/lcode/gen) -- [mdp-sys-backend](https://gitee.com/maimengcloud/mdp-sys-backend) - 登陆、角色管理、权限管理、组织、人员、菜单、部门、元数据等管理功能的服务接口,默认打包合并到mdp-lcode-backend中,如果不涉及改动,无须关注该工程 - +### 基础配套工程 + - [mdp-core](https://gitee.com/maimengcloud/mdp-core) - 该工程作为所有后端的公共封装,不包含任何的业务功能,仅作为后端系统的技术底座,包含一些公共工具、服务类抽象、dao层抽象等。 - 默认打包进mdp-lcode-backend中,一般无须理会 + 该工程作为所有后端的公共封装,不包含任何的业务功能,仅作为后端系统的技术底座,包含一些公共工具、服务类抽象、dao层抽象等。 + +- [mdp-sys-backend](https://gitee.com/maimengcloud/mdp-sys-backend) + 该工程作为系统管理相关功能的后端服务(菜单管理、用户管理、部门、权限管理、登录、注册等) +### 高级配套工程 - [mdp-cloud-backend](https://gitee.com/maimengcloud/mdp-cloud-backend) 该工程作为spring cloud的扩展工程,如果需要将系统发布到spring cloud环境,需要下载该工程重新打包,不包含任何的业务功能,仅作为后端接入cloud环境使用 + - [mdp-oauth2-backend](https://gitee.com/maimengcloud/mdp-oauth2-backend) 该工程为统一认证中心,作为spring oauth2的扩展工程,如果需要将系统接入oauth2环境,需要下载该工程重新打包,该工程实现分布式单点登陆;支持微信、支付宝、短信、账户密码等多种登陆方式 +### 开发辅助工具 +- [mdp-code-generator](https://gitee.com/maimengcloud/mdp-code-generator) 代码生成器 + 生成代码两种方式, + 一、使用代码生成器本地工程,好处是代码可以直接覆盖到本地业务工程,避免复制黏贴出错。 + 二、如果不需要本地生成代码,也可以在低代码平台在线生成。[在线生成代码](https://maimengcloud.com/lcode/m1/#/mdp/lcode/gen) ->⚠️注意:企业可以单独使用mdp-lcode-ui-web作为前端,单独开发后端系统;也可以使用**唛盟团队** 配套开源的后端系统[mdp-lcode-backend](https://gitee.com/maimengcloud/mdp-lcode-backend)作为后端服务。 - +### 拓展应用工程[点我跳转到拓展工程列表](#jump_tzgc) +- 拓展应用工程: 基于唛盟低代码平台拓展的应用工程,其后端可以单体发布,也可以以微服务方式发布,也可以打成jar被唛盟其它应用引入 ## 😭 日常开发中,您是否有以下痛点? @@ -320,12 +358,44 @@ Vue.prototype.$mdp = mdp; ### [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对接哪个后端微服务 +根据不同的环境,需要修改部分内容,主要如下: +```js + + //登录相关,如果后端启用oauth2,则返回oauth2client,如果后端不启用oauth2,后端账户使用mdp-lcode服务,则返回lcode,如果使用mdp-sys提供服务,则返回sys + getOauth2LoginContext:function(){ + return "oauth2client" + }, + + //模块订单 如果后端使用mdp-lcode提供订单服务,则返回lcode,如果使用mdp-sys服务,则返回sys + getMoContext(){ + return 'lcode' + }, + // 如果后端使用mdp-lcode提供账户管理服务,则返回lcode,如果使用mdp-sys提供服务,则返回sys + getSysContext: function() { + return 'lcode' + }, + + // 图片内容服务api路径,如果后端使用mdp-lcode提供图片文件服务,则返回lcode,如果使用mdp-arc提供图片文件服务,则返回arc + getArcContext: function() { + return 'arc' + }, + + // 表单服务api路径,如果后端使用mdp-lcode提供表单服务,则返回lcode,如果使用mdp-form提供服务,则返回form + getFormContext: function() { + return 'lcode' + }, + +``` +#### api的调用方法 ```html ``` ```js this.$mdp.xxxApi() ``` + - [login](/src/api/login.js) 登录相关api @@ -393,6 +463,21 @@ npm run dev return "lcode" } ``` + +#### 图片库、素材库、标签库 +内容相关接口默认打包进mdp-lcode,所以内容相关接口可以直接对接lcode即可,如果内容相关的服务使用独立的第三方开源工程,独立部署,比如直接使用 [mdp-arc-backend](https://gitee.com/maimengcloud/mdp-arc-backend),则更改[mdp_config.js中的getArcContext函数即可快速切换](src/api/mdp_pub/mdp_config.js) +- 对接mdp-arc-backend +```js + getArcContext:function(){ + return "arc" + } +``` +- 对接mdp-lcode-backend +```js + getOauth2LoginContext:function(){ + return "lcode" + } +``` ### 发布 ```bash # 构建测试环境 @@ -411,7 +496,7 @@ mdp 3.0 版本已经开始规划更新了,尽请期待新版本的诞生吧 升级前必看:[CHANGELOG.md](/docs/CHANGELOG.md) -## 🚀 基于mdp框架拓展的开源项目 +## 🚀 基于mdp框架拓展的开源项目 >⚠️ 注意:以下拓展的框架或者子系统,由mdp开源团队基于项目经验进行总结抽取,可用可不用,可以以jar包方式合并到现有工程进行发布,也可单独发布成单体应用、微服务应用 - 第三方支付框架,整合了微信支付、支付宝支付、paypal支付 diff --git a/config/index.js b/config/index.js index 912d0d9c42f9da027e1a44edd8a1f676e6862b87..66721cf73d9138b19806ff3ba1aade07121d7472 100644 --- a/config/index.js +++ b/config/index.js @@ -10,7 +10,7 @@ module.exports = { assetsSubDirectory: '', assetsPublicPath: '/', proxyTable: { - /** + '/api/m1/lcode': { target: 'http://localhost:7014', changeOrigin: true, @@ -18,7 +18,7 @@ module.exports = { '^/api/m1/lcode': '/' } }, - + /** '/api/m1/xm': { target: 'http://localhost:7067', changeOrigin: true, @@ -51,14 +51,14 @@ module.exports = { '^/api/m1/form': '/form' } }, - **/ + '/api': { target: 'https://www.qingqinkj.com', changeOrigin: true, pathRewrite: { '^/api': '/api' } - } + }**/ }, // Various Dev Server settings diff --git a/docs/images/ui-components/mdp-select-table-select.png b/docs/images/ui-components/mdp-select-table-select.png new file mode 100644 index 0000000000000000000000000000000000000000..b38f84b30015b08d84b3b9c66e07310e4843f301 Binary files /dev/null and b/docs/images/ui-components/mdp-select-table-select.png differ diff --git a/src/api/login.js b/src/api/login.js index cd9d32fefe9c7983d4130e2814e34f3ecc49cee0..98f3e4cd40e3fb6a9e85ae7ba6b93195beeeacad 100644 --- a/src/api/login.js +++ b/src/api/login.js @@ -1,17 +1,18 @@ -import axios from '@/utils/request' -import axiosNoAuth from '@/utils/requestNoAuth' +import axios from '@/utils/request' +import axiosNoAuth from '@/utils/requestNoAuth' import { getToken, setToken, removeToken,getCacheUserInfo,setCacheUserInfo,removeCacheUserInfo} from '@/utils/auth' import config from '@/api/mdp_pub/mdp_config' -let base=config.getOauth2LoginContext(); +// let base=config.getOauth2LoginContext(); +let base=config.getLcodeContext(); //let base=''; export function doLoginByUserloginid(userloginid, password,grantType,authType,deptid,userid) { const data = { userloginid: userloginid, - password: password, + password: password, authType:authType, deptid:deptid, userid:userid, @@ -22,10 +23,10 @@ export function doLoginByUserloginid(userloginid, password,grantType,authType,de data }) } -export function switchUser(userloginid, password,grantType,authType,deptid,userid) { +export function switchUser(userloginid, password,grantType,authType,deptid,userid) { const data = { userloginid: userloginid, - password: password, + password: password, authType:authType, deptid:deptid, userid:userid, @@ -36,7 +37,7 @@ export function switchUser(userloginid, password,grantType,authType,deptid,useri data }) } -export function setDefLogin(userid,defLogin) { +export function setDefLogin(userid,defLogin) { const data = { userid: userid, defLogin:defLogin @@ -47,7 +48,7 @@ export function setDefLogin(userid,defLogin) { data }) } -export function checkUserid(userid ) { +export function checkUserid(userid ) { const data = { userid: userid } @@ -57,7 +58,7 @@ export function checkUserid(userid ) { data }) } -export function checkDisplayUserid(displayUserid ) { +export function checkDisplayUserid(displayUserid ) { const data = { displayUserid: displayUserid } @@ -68,7 +69,7 @@ export function checkDisplayUserid(displayUserid ) { }) } -export function updatePhoneno(params ) { +export function updatePhoneno(params ) { const data = params return axios({ url: base+'/user/update/phoneno', @@ -76,7 +77,7 @@ export function updatePhoneno(params ) { data }) } -export function checkPhoneno(phoneno ) { +export function checkPhoneno(phoneno ) { const data = { phoneno: phoneno } @@ -86,7 +87,7 @@ export function checkPhoneno(phoneno ) { data }) } -export function queryByUserloginid( params ) { +export function queryByUserloginid( params ) { return axiosNoAuth({ url: base+'/user/queryByUserloginid', method: 'get', @@ -114,10 +115,10 @@ export function doRegister( userInfo ) { } export function resetPasswordByPhoneno( userInfo ) { - const data = { + const data = { newPassword:userInfo.newPassword, phoneno:userInfo.phoneno, - smsCode:userInfo.smsCode, + smsCode:userInfo.smsCode, userid:userInfo.userid } return axios({ @@ -154,7 +155,7 @@ export function getUserInfo(params) { * 发送邮件 */ -export function sendEmail(params) { +export function sendEmail(params) { const data=params; return axiosNoAuth({ url: base+'/user/sendEmail', @@ -166,7 +167,7 @@ export function sendEmail(params) { * 验证邮箱 */ -export function validEmailCode(params) { +export function validEmailCode(params) { return axios({ url: base+'/user/validEmailCode', method: 'get', @@ -177,22 +178,22 @@ export function validEmailCode(params) { /** * 获取第三方登录需要state参数,防止crfs攻击 - * @param - * @returns + * @param + * @returns */ -export function getTpaState( ) { +export function getTpaState( ) { return axiosNoAuth({ url: '/tpa/login/wechat/wxpub/state', - method: 'post', + method: 'post', data:{} }) } /** * 获取查询当前登录账户的所有关联账户 - * @returns + * @returns */ - export function queryMyUsers( ) { + export function queryMyUsers( ) { return axios({ url: base+'/user/queryMyUsers', method: 'get' diff --git a/src/api/mdp/lcode/intellectualProperty.js b/src/api/mdp/lcode/intellectualProperty.js new file mode 100644 index 0000000000000000000000000000000000000000..ba3d31ce6dc7429d8b10872e053e0d099715b1f0 --- /dev/null +++ b/src/api/mdp/lcode/intellectualProperty.js @@ -0,0 +1,37 @@ +import axios from '@/utils/request' + +import config from '@/api/mdp_pub/mdp_config' + +let base = config.getLcodeContext(); + +/** + * intellectual_property + * 1 默认只开放普通查询,所有查询,只要上传 分页参数 {pageNum:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉, + * 2 查询、新增、修改的参数格式 params={id:'id 主键',createTime:'创建时间',updateTime:'更新时间',image:'商标图片',title:'标题',instructions:'说明',paymentMethod:'微信0支付宝1',paymentTime:'下单时间/支付时间',progress:'progress',agent:'代理人',orderNumber:'订单号',businessType:'业务类型service_projects.uni_code',businessNumber:'业务数量',orderAmount:'订单总额',actualAmount:'实付金额',totalDiscount:'优惠总额',billingStatus:'开票状态01',orderStatus:'创建订单0,已付1,',contactType:'联系人类型',contactName:'联系姓名',contactPhone:'电话',contactEmail:'邮箱',applicantType:'申请人类型,个人0企业1',bookType:'语言',applicantName:'申请人名称',socialCode:'统一社会信用代码',applicantAddress:'申请人地址',applicantEmail:'申请人邮箱',applicantPostalCode:'邮政编码',recipientAddress:'接收人地址',recipientEmail:'接收人邮箱',recipientPostCode:'接收人邮编'} + * @author maimeng-mdp code-gen + * @since 2024年2月14日 + **/ + +//普通查询 条件之间and关系 +export const listIntellectualProperty = params => { return axios.get(`${base}/com/intellectualProperty/list`, { params: params }); }; + +//普通查询 条件之间and关系 +export const queryIntellectualPropertyById = params => { return axios.get(`${base}/com/intellectualProperty/queryById`, { params: params }); }; + +//删除一条intellectual_property params={id:'id 主键'} +export const delIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/del`,params); }; + +//批量删除intellectual_property params=[{id:'id 主键'}] +export const batchAddIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/batchAdd`, params); }; + +//批量删除intellectual_property params=[{id:'id 主键'}] +export const batchDelIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/batchDel`, params); }; + +//修改一条intellectual_property记录 +export const editIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/edit`, params); }; + +//新增一条intellectual_property +export const addIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/add`, params); }; + +//批量修改某些字段 +export const editSomeFieldsIntellectualProperty = params => { return axios.post(`${base}/com/intellectualProperty/editSomeFields`, params); }; diff --git a/src/api/mdp/lcode/intellectualServiceProjects.js b/src/api/mdp/lcode/intellectualServiceProjects.js new file mode 100644 index 0000000000000000000000000000000000000000..8ca989fdbc23e7cbfb4a22bef5ef157a411b96a4 --- /dev/null +++ b/src/api/mdp/lcode/intellectualServiceProjects.js @@ -0,0 +1,37 @@ +import axios from '@/utils/request' + +import config from '@/api/mdp_pub/mdp_config' + +let base = config.getLcodeContext(); + +/** + * intellectual_service_projects + * 1 默认只开放普通查询,所有查询,只要上传 分页参数 {pageNum:当前页码从1开始,pageSize:每页记录数,total:总记录【数如果是0后台会自动计算总记录数非0不会自动计算】},后台都会自动按分页查询 其它 api用到再打开,没用到的api请注释掉, + * 2 查询、新增、修改的参数格式 params={id:'id 主键',createTime:'创建时间',updateTime:'更新时间',uniCode:'服务项目号',serviceTitle:'服务主题',groupCode:'服务项目组别(商标业务0,专利业务1,版权业务2,科技项目3)',groupTitle:'服务项目组别标题(商标业务,专利业务,版权业务,科技项目)',explainText:'说明',serviceCharge:'服务费',fixedCharge:'官费'} + * @author maimeng-mdp code-gen + * @since 2024年2月16日 + **/ + +//普通查询 条件之间and关系 +export const listIntellectualServiceProjects = params => { return axios.get(`${base}/com/intellectualServiceProjects/list`, { params: params }); }; + +//普通查询 条件之间and关系 +export const queryIntellectualServiceProjectsById = params => { return axios.get(`${base}/com/intellectualServiceProjects/queryById`, { params: params }); }; + +//删除一条intellectual_service_projects params={id:'id 主键'} +export const delIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/del`,params); }; + +//批量删除intellectual_service_projects params=[{id:'id 主键'}] +export const batchAddIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/batchAdd`, params); }; + +//批量删除intellectual_service_projects params=[{id:'id 主键'}] +export const batchDelIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/batchDel`, params); }; + +//修改一条intellectual_service_projects记录 +export const editIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/edit`, params); }; + +//新增一条intellectual_service_projects +export const addIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/add`, params); }; + +//批量修改某些字段 +export const editSomeFieldsIntellectualServiceProjects = params => { return axios.post(`${base}/com/intellectualServiceProjects/editSomeFields`, params); }; diff --git a/src/api/mdp/pay/pay.js b/src/api/mdp/pay/pay.js index 94cf347775131b55fab529544944de83afdd00b9..087e60226db1d62974b2f6341db651686c0d50d5 100644 --- a/src/api/mdp/pay/pay.js +++ b/src/api/mdp/pay/pay.js @@ -2,6 +2,6 @@ import axios from '@/utils/request' import config from '@/api/mdp_pub/mdp_config' let base = config.getPayContext(); -export const aliPay = params => { return axios.post(`${base}/alipay/uniOrder`, params) } -export const weixinPay = params => { return axios.post(`${base}/wxpay/uniOrder/native`, params) } -export const checkWxPayStatus = params => { return axios.get(`${base}/wxpay/uniOrder/checkOrderStatus`, {params}) } +export const aliPay = params => { return axios.post(`${base}/pay/alipay/uniOrder`, params) } +export const weixinPay = params => { return axios.post(`${base}/pay/wxpay/uniOrder/native`, params) } +export const checkWxPayStatus = params => { return axios.get(`${base}/pay/wxpay/uniOrder/checkOrderStatus`, {params}) } diff --git a/src/api/mdp_pub/mdp_config.js b/src/api/mdp_pub/mdp_config.js index cee6e2c145836dba96cb3b803ec09683a4977e77..44e33ee2ecb77660089c6167b4b781d59a1680ae 100644 --- a/src/api/mdp_pub/mdp_config.js +++ b/src/api/mdp_pub/mdp_config.js @@ -7,20 +7,26 @@ var sysName="唛盟智能开发";//系统名称,用于展示 export default { - //登录相关 + //登录相关,如果后端启用oauth2,则返回oauth2client,如果后端不启用oauth2,后端账户使用mdp-lcode服务,则返回lcode,如果使用mdp-sys提供服务,则返回sys getOauth2LoginContext:function(){ return "oauth2client" }, - //短信相关 - getSmsContext: function() { - return 'sms' + + //模块订单 如果后端使用mdp-lcode提供订单服务,则返回lcode,如果使用mdp-sys服务,则返回sys + getMoContext(){ + return 'lcode' }, - // 图片内容服务api路径 + // 如果后端使用mdp-lcode提供账户管理服务,则返回lcode,如果使用mdp-sys提供服务,则返回sys + getSysContext: function() { + return 'lcode' + }, + + // 图片内容服务api路径,如果后端使用mdp-lcode提供图片文件服务,则返回lcode,如果使用mdp-arc提供图片文件服务,则返回arc getArcContext: function() { return 'arc' }, - // 图片内容服务api路径 + // 表单服务api路径 getFormContext: function() { return 'lcode' }, @@ -28,6 +34,10 @@ export default { getLcodeContext: function() { return 'lcode' }, + //短信相关 + getSmsContext: function() { + return 'sms' + }, // 工作流api路径 getWorkflowContext: function() { return 'workflow' @@ -48,14 +58,6 @@ export default { getPayContext:function() { return 'tpa' }, - //模块订单 - getMoContext(){ - return 'lcode' - }, - // 系统管理api路径 - getSysContext: function() { - return 'lcode' - }, getTpaContext: function(){ return 'tpa' }, diff --git a/src/components/mdp-ui/directive/adaptive.js b/src/components/mdp-ui/directive/adaptive.js index 366a3459a183d50051b022bef0c9f1ad8d20fe1d..2627c1ecb2bed65ab91c9dc2d8fcf0eab29ce027 100644 --- a/src/components/mdp-ui/directive/adaptive.js +++ b/src/components/mdp-ui/directive/adaptive.js @@ -1,46 +1,47 @@ // 设置表格高度 const doResize = async (el, binding, vnode) => { - // 获取表格Dom对象 - if(vnode.$table){ + // 获取表格Dom对象 + if(vnode.componentInstance && vnode.componentInstance.doLayout){ const { componentInstance: $table } = await vnode - - // 获取调用传递过来的数据 + + // 获取调用传递过来的数据 const { value } = binding - + if (!$table.height) { throw new Error(`el-$table must set the height. Such as height='100px'`) } // 获取距底部距离(用于展示页码等信息) const bottomOffset = (value && value.bottomOffset) || 50 - + // 计算列表高度并设置 const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset $table.layout.setHeight(height) $table.doLayout() - }else{ + }else{ + debugger; //要起作用,请先给容器添加一个默认高度,否则不起作用 - // 获取调用传递过来的数据 + // 获取调用传递过来的数据 const { value } = binding // 获取距底部距离(用于展示页码等信息) const bottomOffset = (value && value.bottomOffset) || 50 - + // 计算列表高度并设置 - const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset + const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset el.style.height = height+'px'; // 更新元素高度 } - + } export default { // 初始化设置 - bind(el, binding, vnode) { + bind(el, binding, vnode) { // 设置resize监听方法 el.resizeListener = async () => { await doResize(el, binding, vnode) diff --git a/src/components/mdp-ui/mdp-select-table/Index.vue b/src/components/mdp-ui/mdp-select-table/Index.vue index c5f10c12c1d830582d7c8f9e7ebfd82ceae3d444..53c0e36239feb75e35c3cb9374293e46ce17f89d 100644 --- a/src/components/mdp-ui/mdp-select-table/Index.vue +++ b/src/components/mdp-ui/mdp-select-table/Index.vue @@ -107,7 +107,7 @@ diff --git a/src/views/mdp/lcode/iproperty/CustomerPurchase.vue b/src/views/mdp/lcode/iproperty/CustomerPurchase.vue new file mode 100644 index 0000000000000000000000000000000000000000..16548983a4d61a275c7ebb0f516d5a2894aaa0e1 --- /dev/null +++ b/src/views/mdp/lcode/iproperty/CustomerPurchase.vue @@ -0,0 +1,388 @@ + + + + {{ selectArr[selectIndex].groupTitle }} + {{ selectArr[selectIndex].explainText }} + + + + + + {{ + item.serviceTitle + }} + + + + ¥ {{ serviceProject.serviceCharge }} + + + ¥{{ serviceProject.fixedCharge }} + + + + + + ¥{{ addForm.orderAmount }} + + + 问题咨询 + 立即办理 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/CustomerSelf.vue b/src/views/mdp/lcode/iproperty/CustomerSelf.vue new file mode 100644 index 0000000000000000000000000000000000000000..738373141849f20d830e084ef3bed37f4200efea --- /dev/null +++ b/src/views/mdp/lcode/iproperty/CustomerSelf.vue @@ -0,0 +1,334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 查询 + + + + + 重置查询 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 详情 + + + 付款 + + + 取消订单 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/Form.vue b/src/views/mdp/lcode/iproperty/Form.vue new file mode 100644 index 0000000000000000000000000000000000000000..91a34210747dc231371350fccbf7e817553ec39e --- /dev/null +++ b/src/views/mdp/lcode/iproperty/Form.vue @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 关闭 + 提交 + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/Index.vue b/src/views/mdp/lcode/iproperty/Index.vue new file mode 100644 index 0000000000000000000000000000000000000000..6069a05f1ec1edfe1e870863e80e4090a76f96cc --- /dev/null +++ b/src/views/mdp/lcode/iproperty/Index.vue @@ -0,0 +1,228 @@ + + + + + + 查询 + + + + + + + + + + + + 重置查询 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 导出 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/Payment.vue b/src/views/mdp/lcode/iproperty/Payment.vue new file mode 100644 index 0000000000000000000000000000000000000000..31b6d1359a47151c79d69df8a8d67f68314df686 --- /dev/null +++ b/src/views/mdp/lcode/iproperty/Payment.vue @@ -0,0 +1,297 @@ + + + + + + 订单提交成功,应付金额: ¥{{ editForm.orderAmount }} + ( 业务总价:¥ {{ editForm.orderAmount }} 优惠:¥0 ) + + + 订单编号:{{ editForm.orderNumber }} + 购买服务:{{serviceProject.serviceTitle}} + + + + + + + 选择支付方式 + 付款账户如果是公司账户,则可以为付款的公司账户开具发票;如果是个人账户,则只能为付款人或申请人开具发票,请选择适合的付款账户 + + + + 支付宝 + 微信 + + + + + + + 选择优惠 + + + + + + + + + + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/addForm.vue b/src/views/mdp/lcode/iproperty/addForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..3daa2a20906909f50ea8552e61799d2522a4b88a --- /dev/null +++ b/src/views/mdp/lcode/iproperty/addForm.vue @@ -0,0 +1,393 @@ + + + + + 您将要购买的服务如下 + + + + + + 服务名称 + 购买件数 + 服务总价(元) + + + + + {{ serviceProject.serviceTitle }} + {{ editForm.businessNumber }} + {{ editForm.orderAmount }} + + + + + + + + + 订单联系人 + + + + + + + + + + + + + + + + + + + 关闭 + + 提交 + + + + + + + + + 增值服务 + + + + + 安心注册保障:守护你的商标,全部驳 + xxx大师提供安心注册保障服务 + + + 安心12个月只需189元 + + + + + + + 订单金额 + + + + 业务总价: + ¥{{ editForm.orderAmount }} + + + 增值服务: + ¥00.00 + + + 应付金额: + ¥{{ editForm.actualAmount }} + + + + + + + + + diff --git a/src/views/mdp/lcode/iproperty/detail.vue b/src/views/mdp/lcode/iproperty/detail.vue new file mode 100644 index 0000000000000000000000000000000000000000..4beb5c93ecbaef09db67ed155f5511be43517bb3 --- /dev/null +++ b/src/views/mdp/lcode/iproperty/detail.vue @@ -0,0 +1,320 @@ + + + + + 订单状态 + + + + + + + + + + + + + 订单信息 + + + + + + + + + + + + + + 未申请 + 已申请 + + + + + + + 联系信息 + + + + + + + + + + + + 商标申请人信息 + + + {{ editForm.applicantType == '0' ? '个人' : '企业' }} + + {{ editForm.bookType }} + {{ editForm.applicantName }} + {{ editForm.socialCode }} + {{ editForm.applicantAddress }} + {{ editForm.applicantEmail }} + {{ editForm.applicantPostalCode }} + + + + {{ editForm.contactName }} + {{ editForm.contactPhone }} + {{ editForm.contactEmail }} + + + + {{ editForm.recipientAddress }} + {{ editForm.recipientEmail }} + {{ editForm.recipientPostCode }} + + + + + + 商标信息/版权/专利/科技项目 + + + + {{ editForm.title }} + {{ editForm.instructions }} + + + + + + + 交官文件 + + + + + + + + + + + + + + + + + + + + + + + + + + 官文信息 + + + + + + + + + + + + + + + diff --git a/src/views/mdp/mo/moOrder/Form.vue b/src/views/mdp/mo/moOrder/Form.vue index aa46477ad2856edc69b4b60bf5bb2fa52bb8ce42..12723bd87b9eb2c982b0dfb13ef951d9be587429 100644 --- a/src/views/mdp/mo/moOrder/Form.vue +++ b/src/views/mdp/mo/moOrder/Form.vue @@ -6,7 +6,9 @@ {{editForm.id}} {{editForm.obranchName}} - ¥{{editForm.ofinalFee}}元 + ¥{{editForm.moFinalFee}}元 + {{editForm.odisRate}}% + ¥{{editForm.ofinalFee}}元 @@ -126,27 +128,37 @@ - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + 创建微信收款码 + + + + 创建支付宝收款码 + + @@ -164,9 +176,10 @@ - - % - + + % + 确认修改折扣率 + @@ -190,6 +203,9 @@ import * as MoOrderApi from '@/api/mdp/mo/moOrder'; import { mapGetters } from 'vuex' import { MdpFormMixin } from '@/components/mdp-ui/mixin/MdpFormMixin.js'; +import {createOrder} from '@/api/mdp/sys/order' +import {aliPay, weixinPay, checkWxPayStatus} from '@/api/mdp/pay/pay' + import MoOrderModuleIndex from '../moOrderModule/Index.vue'; export default { name:'moOrderForm', @@ -217,6 +233,9 @@ export default { editForm: { id:'',name:'',obranchId:'',ouserid:'',ousername:'',moFinalFee:'',status:'',sstatus:'',ctime:'',payTime:'',payCtime:'',moOrginFee:'',ousers:'',ocates:'',omodules:'',poid:'',startTime:'',endTime:'',payType:'',payId:'',prepayId:'',topenId:'',pbankId:'',pbankName:'',pbankCardNo:'',pbankUsername:'',remark:'',finishTime:'',closeTime:'',setTime:'',odays:'',ofinalFee:'',odisRate:'',othFee:'',otype:'',osource:'',memType:'',atype:'',saleUserid:'',saleUsername:'',custPhone:'',custAddress:'',payAt:'',obranchName:'',ooper:'',tranId:'',invoice:'',invoiceTime:'',invoiceId:'' }, + odisRate:null, + codeUrl:null, + timer:0, //增删改查(含批量)接口 apis:{ queryById: MoOrderApi.queryMoOrderById, @@ -258,6 +277,87 @@ export default { params[fieldName]=$event return true; }, + odisRateConfirm(){ + var params={$pks:[this.editForm.id],odisRate:this.odisRate} + this.apis.editSomeFields(params).then(res=>{ + var tips = res.data.tips + if(tips.isOk){ + Object.assign(this.editForm,res.data.data) + } + this.$notify({ message: tips.msg, type: tips.isOk?'success':'error' }); + }) + }, + + createOrder() { + let orderId = this.editForm.id; + if(this.editForm.payType == '2') { + this.toAliPay(orderId); + return; + }else if(this.editForm.payType == '1') { + this.toWeixinPay(orderId); + return; + }else{ + this.$notify({ message: "请选则支付方式", type:'error' }); + return; + } + }, + + toAliPay(orderId) { + let params = { + id: orderId, + otype: 1, + returnUrl: `${window.location.protocol+"//"+window.location.host}/${process.env.CONTEXT}/${process.env.VERSION}/#/my/order/paySuccess` + } + aliPay(params).then(res => { + if(res.data.tips.isOk) { + let routerData = this.$router.resolve({path:'/my/order/alipay',query: {htmlStr: res.data.data.htmlStr}}) + // 打开新页面 + window.open(routerData.href, '_blank') + }else { + this.$notify.error(res.data.tips.msg); + } + }).finally(() => { + setTimeout(() => { + this.load.add = false; + }, 2000); + }) + }, + + toWeixinPay(orderId) { + let params = { + id: orderId, + otype: 1, + returnUrl: "" + } + weixinPay(params).then(res => { + if(res.data.tips.isOk) { + this.codeUrl = res.data.data.codeUrl; + this.timer = setInterval(() => { + this.queryOrderStatus(orderId,res.data.data.payId) + }, 3000) + }else { + this.$notify.error(res.data.tips.msg); + } + }).finally(() => { + setTimeout(() => { + this.load.add = false; + }, 2000); + }) + }, + + //查询订单支付状态 + queryOrderStatus(orderId,payId) { + console.log("查询订单"); + checkWxPayStatus({'orderId': orderId, "otype": "1","payId":payId}).then(res => { + if(res.data.tips.isOk) { + this.$router.push({path:'/my/order/paySuccess', query:{total_amount: this.editForm.ofinalFee, out_trade_no: orderId,pay_id:payId}}); + clearInterval(this.timer); + }else { + } + }).finally(() => { + + }) + }, }, mounted() { diff --git a/src/views/mdp/mo/moOrder/Index.vue b/src/views/mdp/mo/moOrder/Index.vue index 1cc1ac337d54ce4836e9fe564ca996b1b2d9d238..11a73ef6c86224ef2356e01e83d8acc903a4beda 100644 --- a/src/views/mdp/mo/moOrder/Index.vue +++ b/src/views/mdp/mo/moOrder/Index.vue @@ -1,8 +1,12 @@ - - 查询 + + + + + + 查询 @@ -41,7 +45,7 @@ - + @@ -71,9 +75,19 @@ - + - + + + + + + + + + + + @@ -106,7 +120,7 @@ - + @@ -171,21 +185,6 @@ - - - - - - - - - - - - - - - @@ -256,6 +255,11 @@ + + + + + @@ -344,7 +348,7 @@ export default { }, - defaultCheckColumnNum:8,//默认展示的表格列数,前8列 + defaultCheckColumnNum:15,//默认展示的表格列数,前8列 //增删改查(含批量)接口 apis:{ diff --git a/src/views/mdp/mo/moOrderModule/Index.vue b/src/views/mdp/mo/moOrderModule/Index.vue index 65d4c16c8a8d21022953d94d4a4caaeaaaee706c..c253df6b85472a2505dda5993de873f5a4002d38 100644 --- a/src/views/mdp/mo/moOrderModule/Index.vue +++ b/src/views/mdp/mo/moOrderModule/Index.vue @@ -1,7 +1,7 @@ - + 查询 diff --git a/src/views/mdp/sys/dept/Form.vue b/src/views/mdp/sys/dept/Form.vue index 6f25bad534d986b6f5c72e26394a6bc55d44eb3d..f624384d701e2862b28fecb939754e9c091b3542 100644 --- a/src/views/mdp/sys/dept/Form.vue +++ b/src/views/mdp/sys/dept/Form.vue @@ -3,63 +3,64 @@ + + + + + + + - + - - - - - - + + - + - - - - - + + - + - + 启用 停用 - - + + - + - - + + 关闭 - 提交 + 提交 @@ -80,6 +81,7 @@ export default { computed: { }, props:{ + parentDept:null, }, watch: { }, @@ -88,11 +90,22 @@ export default { menuDefId:'',//menu_def.id 菜单表菜单编号,用于按钮权限判断 pkNames:["deptid"],//表格主键的java属性名称,驼峰命名,默认为id,支持多主键 currOpType:'mng',//表单 add、edit,所有按钮可动、detail-只看不能操作 - editFormRules: { - deptid:[ - //{ required: true, message: '此项必填', trigger: 'change' }, - //{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'} - ] + editFormRules: { + deptName:[ + { required: true, message: '此项必填', trigger: 'change' }, + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], + shortName:[ + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], + + displayDeptid:[ + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], + + deptid:[ + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], }, editForm: { deptid:'',deptName:'',pdeptid:'',deptType:'',state:'',manager:'',leader:'',shortName:'',displayDeptid:'',orgType:'',managerName:'',leaderName:'',branchId:'',levelType:'',idPath:'',bizProcInstId:'',bizFlowState:'',ltime:'',isCbCenter:'',cpaType:'',cpaBranchId:'' @@ -109,20 +122,33 @@ export default { methods: { //由组件扩展添加其它的初始页面的逻辑 initCurrData(){ - this.disabledRulesInit(this.disabledRules) - + debugger + this.disabledRulesInit(this.disabledRules) if(this.currOpType=='subAdd'){ var data=this.parentDept; this.editForm.pdeptid=data.deptid; this.editForm.branchId=data.branchId; this.editForm.levelType =data.levelType; + this.editForm.cpaType='0' + this.editForm.state="A" + this.editForm.deptType="2" + this.editForm.cpaBranchId=data.branchId + this.editForm.deptType="2" + this.editForm.manager=this.userInfo.userid + this.editForm.managerName=this.userInfo.username var a=this.editForm.levelType.split("L").join("");//字符串转数字 var leve = Number(a); this.editForm.levelType = "L"+(leve+1);//字母数字组合 }else if(this.currOpType=='add'){ this.editForm.pdeptid='A0' this.editForm.levelType="L1" - this.editForm.branchId=this.userInfo.branchId + this.editForm.branchId=this.userInfo.branchId + this.editForm.cpaType='0' + this.editForm.state="A" + this.editForm.deptType="2" + this.editForm.cpaBranchId=this.editForm.branchId + this.editForm.manager=this.userInfo.userid + this.editForm.managerName=this.userInfo.username } }, /** @@ -151,10 +177,12 @@ export default { editSomeFieldsCheck(row,fieldName,$event,params){ if(fieldName=='manager'){ row.managerName=$event.username + row.manager=$event.userid params.managerName=$event.username params.manager=$event.userid }else if(fieldName=='leader'){ row.leaderName=$event.username + row.leader=$event.userid params.leaderName=$event.username params.leader=$event.userid }else{ diff --git a/src/views/mdp/sys/dept/Index.vue b/src/views/mdp/sys/dept/Index.vue index f026617259a275ffc9f3ba230aabdce67a59bb58..7a9a9ae7d959b827c023fce405b52f12365fb533 100644 --- a/src/views/mdp/sys/dept/Index.vue +++ b/src/views/mdp/sys/dept/Index.vue @@ -123,7 +123,7 @@ - + diff --git a/src/views/mdp/sys/deptPost/DeptPostMng.vue b/src/views/mdp/sys/deptPost/DeptPostMng.vue index f071c6dd299297c6951a33d8eb3cef8523e35167..bec37cf6b1e176eecf4c036588e7b70ce7a5e691 100644 --- a/src/views/mdp/sys/deptPost/DeptPostMng.vue +++ b/src/views/mdp/sys/deptPost/DeptPostMng.vue @@ -53,6 +53,7 @@ }, watch: { visible(val){ + debugger; if(val==true){ this.getDeptPosts(); this.getPosts(); @@ -161,7 +162,11 @@ components: { //在下面添加其它组件 }, - mounted() { + mounted() { + if(this.visible==true){ + this.getDeptPosts(); + this.getPosts(); + } } } diff --git a/src/views/mdp/sys/post/Form.vue b/src/views/mdp/sys/post/Form.vue index 6fed8d64b90bbe358349a8c2d8e4de190034a99c..398011ab3c486876e25fdf31c3da3ee39da4e327 100644 --- a/src/views/mdp/sys/post/Form.vue +++ b/src/views/mdp/sys/post/Form.vue @@ -3,27 +3,28 @@ - - - + + + + - + - + - - + + - - + + @@ -60,8 +61,15 @@ export default { currOpType:'mng',//表单 add、edit,所有按钮可动、detail-只看不能操作 editFormRules: { id:[ - //{ required: true, message: '此项必填', trigger: 'change' }, - //{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'} + //{ required: true, message: '此项必填', trigger: 'change' }, + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], + postName:[ + { required: true, message: '此项必填', trigger: 'change' }, + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} + ], + remark:[ + { min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'} ] }, editForm: { @@ -79,7 +87,11 @@ export default { methods: { //由组件扩展添加其它的初始页面的逻辑(mounted+onOpen都会调用此函数,建议只添加公共逻辑) initCurrData(){ - + if(this.currOpType=='add'){ + this.editForm.postLvl='1' + this.editForm.postType='1' + this.editForm.branchId=this.userInfo.branchId + } }, /** * 检查参数是否满足调用后台接口的条件 diff --git a/src/views/mdp/sys/postRole/SetRolesToPost.vue b/src/views/mdp/sys/postRole/SetRolesToPost.vue index 866626d7ded4fd0a77328e86dc49791e2217f2f5..e37606a59b1273bee11bc5918eda0295c2ce9a09 100644 --- a/src/views/mdp/sys/postRole/SetRolesToPost.vue +++ b/src/views/mdp/sys/postRole/SetRolesToPost.vue @@ -101,7 +101,7 @@ import { }, mounted() { this.load.list=true; - listRole({branchId:this.userInfo.branchId}).then(res=>{ + listRole({}).then(res=>{ this.load.list=false; this.roles=res.data.data }).catch(()=>this.load.list=false); diff --git a/src/views/mdp/sys/role/Form.vue b/src/views/mdp/sys/role/Form.vue index d710d57facae5fe689b56180df1dc29ef6128a4a..7bf66f6718a459af65834fb853dad7812d834f63 100644 --- a/src/views/mdp/sys/role/Form.vue +++ b/src/views/mdp/sys/role/Form.vue @@ -2,13 +2,13 @@ - - - - + + + + @@ -32,13 +32,13 @@ - + - + @@ -76,7 +76,7 @@ export default { editFormRules: { roleid:[ //{ required: true, message: '此项必填', trigger: 'change' }, - //{ min: 1,max: 200, message: '长度在1到200之间', trigger: 'change'} + { min: 1,max: 50, message: '长度在1到50之间', trigger: 'change'} ], rolename: [ { required: true, message: '角色名必输', trigger: 'blur' } @@ -86,7 +86,10 @@ export default { ], enabled: [ { required: true, message: '是否启用必输', trigger: 'blur' } - ] + ], + sortOrder: [ + { max:5, message: '最大不能超过99999', trigger: 'blur' } + ], }, editForm: { roleid:'',rolename:'',remark:'',roletype:'',rolebeg:'',roleend:'',crdate:'',enabled:'',deptid:'',sortOrder:'',branchId:'',dataLvl:'' @@ -105,6 +108,13 @@ export default { initCurrData(){ this.disabledRulesInit(this.disabledRules) Object.assign(this.editForm,this.formData) + if(this.currOpType=='add'){ + this.editForm.branchId=this.userInfo.branchId + this.editForm.dataLvl='2' + this.editForm.enabled='1' + this.editForm.roletype="0" + this.editForm.sortOrder=999 + } }, /** * 检查参数是否满足调用后台接口的条件 diff --git a/src/views/mdp/sys/user/Form.vue b/src/views/mdp/sys/user/Form.vue index 263584dc1d2f2400374774f1045ae625826973e3..861f22da83b9d6af1d63efedede7abb7b40154e2 100644 --- a/src/views/mdp/sys/user/Form.vue +++ b/src/views/mdp/sys/user/Form.vue @@ -7,26 +7,32 @@ - - - - - - + + + + + + - + + + + 正常 + 已锁定 + + - + @@ -38,20 +44,13 @@ - + - - - - 正常 - 已锁定 - - - + - + @@ -85,15 +84,15 @@ - + - - + + - - + +