diff --git a/README.md b/README.md index ffc756c763afa41600d4083a98197d6cd9858b9d..063631ada969ddb0a330331d74b62d20bc34d9c4 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ Jeecg-Boot 快速开发平台(前后端分离版本) =============== -当前最新版本: 1.0(发布日期:20190304) +当前最新版本: 1.1(发布日期:20190415) 项目介绍: ----------------------------------- @@ -79,28 +79,85 @@ JeecgBoot的宗旨是降低前后端分离的开发成本,提高UI能力的同 ├─系统管理 │ ├─用户管理 │ ├─角色管理 -│ ├─菜单管理(权限设置) +│ ├─菜单管理 +│ ├─权限设置(支持按钮权限、数据权限) │ ├─部门管理 │ └─字典管理 ├─智能化功能 -│ ├─代码生成器功能(一键生成,包括前端页面也可以生成,绝对是后端开发福音) +│ ├─代码生成器功能(一键生成前后端代码,生成后无需修改直接用,绝对是后端开发福音) +│ ├─代码生成器模板(提供4套模板,分别支持单表和一对多模型,不同风格选择) +│ ├─代码生成器模板(生成代码,自带excel导入导出) +│ ├─查询过滤器(查询逻辑无需编码,系统根据页面配置自动生成) +│ ├─高级查询器(弹窗自动组合查询条件) +│ ├─Excel导入导出工具集成(支持单表,一对多 导入导出) +│ ├─平台移动自适应支持 +├─Online在线开发 +│ ├─Online在线表单 +│ ├─Online在线图表 +│ ├─Online在线报表 +│ ├─消息中心(支持短信、邮件、微信推送等等) ├─系统监控 +│ ├─性能扫描监控 +│ │ ├─监控 Redis +│ │ ├─Tomcat +│ │ ├─jvm +│ │ ├─服务器信息 +│ │ ├─请求追踪 │ ├─定时任务 │ ├─系统日志 +│ ├─数据日志(记录数据变更情况,可进行版本对比查看数据变更记录) │ ├─系统通知 │ ├─SQL监控 │ ├─swagger-ui(在线接口文档) +│─报表示例 +│ ├─曲线图 +│ └─饼状图 +│ └─柱状图 +│ └─折线图 +│ └─面积图 +│ └─雷达图 +│ └─仪表图 +│ └─进度条 +│ └─排名列表 +│ └─等等 │─常用示例 │ ├─单表模型例子 │ └─一对多模型例子 │ └─打印例子 │ └─一对多TAB例子 +│ └─内嵌table例子 +│ └─常用选择组件 +│ └─一对多JEditable +│ └─接口模拟测试 +│ └─一对多JEditable +│─封装通用组件 +│ ├─行编辑表格JEditableTable +│ └─省略显示组件 +│ └─时间控件 +│ └─高级查询 +│ └─通用选择用户组件 +│ └─通过组织机构选择用户组件 +│ └─报表组件封装 +│ └─等等组件 │─更多页面模板 │ ├─各种高级表单 │ ├─各种列表效果 │ └─结果页面 │ └─异常页面 │ └─个人页面 +│─流程模块功能 +│ ├─在线流程设计 +│ ├─在线表单设计 +│ └─我的任务 +│ └─历史流程 +│ └─历史流程 +│ └─流程实例管理 +│ └─流程监听管理 +│ └─流程表达式 +│ └─我发起的流程 +│ └─我的抄送 +│ └─流程委派、抄送、跳转 +│ └─。。。 └─其他模块 └─其他 @@ -110,19 +167,31 @@ JeecgBoot的宗旨是降低前后端分离的开发成本,提高UI能力的同 系统效果 ---- -![输入图片说明](https://static.oschina.net/uploads/img/201902/25154007_icdX.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25153956_Q752.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201901/07154149_555Q.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25154209_qlCg.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25154251_XoW9.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25154331_0ndT.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25154414_ckFS.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25155155_Hm6H.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25155213_T04n.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25155224_MRLU.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25155234_7zCP.png "在这里输入图片标题") -![输入图片说明](https://static.oschina.net/uploads/img/201902/25155242_K7Sw.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201902/25154007_icdX.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14155402_AmlV.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160623_8fwk.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160633_u59G.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160643_kCJ7.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160650_fcgw.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160657_cHwb.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160705_NAJn.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160751_bsO9.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160801_2AhS.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160813_KmXS.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160828_pkFr.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160834_Lo23.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160842_QK7B.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160849_GBm5.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160858_6RAM.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160905_RGJ5.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160917_9Ftz.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160926_PUDV.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160935_Nibs.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160947_gfoN.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14160957_hN3X.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14161004_bxQ4.png "在这里输入图片标题") +![输入图片说明](https://static.oschina.net/uploads/img/201904/14161013_zW5n.png "在这里输入图片标题") @@ -134,7 +203,7 @@ JeecgBoot的宗旨是降低前后端分离的开发成本,提高UI能力的同 - jdk8 - mysql - redis -- 数据库脚步:jeecg-boot\docs\dbsys-init-20190225.sql +- 数据库脚步:jeecg-boot\docs\jeecg-boot_1.1.0-20190415.sql - 默认登录账号: admin/123456 diff --git a/ant-design-jeecg-vue/README.md b/ant-design-jeecg-vue/README.md index e8835f02a9f6d42d35d165816e802eea355c7459..8c71330228245a1d1807de77c0f97d3c4af84624 100644 --- a/ant-design-jeecg-vue/README.md +++ b/ant-design-jeecg-vue/README.md @@ -1,11 +1,13 @@ -Jeecg-Boot 快速开发平台(前后端分离版本) -=============== +Ant Design Jeecg Vue +==== -当前最新版本: 1.0(发布日期:20190225) +当前最新版本: 1.1(发布日期:20190415) -项目介绍: ------------------------------------ -Jeecg-boot 一个全新的版本,采用前后端分离方案,提供强大代码生成器的快速开发平台。 +Overview +---- + +基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Ant Design Pro Vue 版 +Jeecg-boot 的前段UI框架,采用前后端分离方案,提供强大代码生成器的快速开发平台。 前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!! diff --git a/ant-design-jeecg-vue/package.json b/ant-design-jeecg-vue/package.json index 6d6baff5cab9178d9cd29dcb5d220e54cac21488..16020edebf335ac526fbf63caab90f393910f83a 100644 --- a/ant-design-jeecg-vue/package.json +++ b/ant-design-jeecg-vue/package.json @@ -1,6 +1,6 @@ { - "name": "vue-antd-pro", - "version": "1.1.0", + "name": "vue-antd-jeecg", + "version": "1.0.2", "private": true, "scripts": { "serve": "vue-cli-service serve --open", @@ -11,7 +11,9 @@ }, "dependencies": { "@antv/data-set": "^0.10.1", + "@tinymce/tinymce-vue": "^2.0.0", "ant-design-vue": "^1.3.1", + "apexcharts": "^3.6.5", "axios": "^0.18.0", "dayjs": "^1.8.0", "enquire.js": "^2.1.6", @@ -20,13 +22,15 @@ "lodash.pick": "^4.4.0", "md5": "^2.2.1", "nprogress": "^0.2.0", + "tinymce": "^5.0.2", "viser-vue": "^2.4.4", "vue": "^2.5.22", + "vue-apexcharts": "^1.3.2", "vue-class-component": "^6.0.0", "vue-cropper": "^0.4.8", "vue-i18n": "^8.7.0", "vue-ls": "^3.2.0", - "vue-print-nb": "^1.0.3", + "vue-print-nb-jeecg": "^1.0.5", "vue-property-decorator": "^7.3.0", "vue-router": "^3.0.1", "vuex": "^3.0.1", diff --git a/ant-design-jeecg-vue/public/color.less b/ant-design-jeecg-vue/public/color.less index c7e6b1b23ba2496f3a1f63f1160be48f08fa788f..f41d377dfc43d7cb3c9947c50ee505822d502af2 100644 --- a/ant-design-jeecg-vue/public/color.less +++ b/ant-design-jeecg-vue/public/color.less @@ -2175,9 +2175,8 @@ this.tinycolor = tinycolor; .globalFooter .copyright { color: rgba(0, 0, 0, 0.45); } -.header { - background: #fff; - box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +.layout .header { + background-color: @primary-color !important; } i.trigger:hover { background: rgba(0, 0, 0, 0.025); @@ -2342,24 +2341,22 @@ i.trigger:hover { border-radius: 2px; color: #fff; } -.logo { -} .logo h1 { color: white; } .sider { - box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); + box-shadow: 2px 116px 6px rgba(0, 21, 41, 0.35); } .sider.light { - box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); + box-shadow: 2px 116px 8px 0 rgba(29, 35, 41, 0.05); background-color: white; } .sider.light .logo { - background: white; + background-color: @primary-color !important; box-shadow: 1px 1px 0 0 #e8e8e8; } .sider.light .logo h1 { - color: @primary-color; + color: white; } .sider.light :global(.ant-menu-light) { border-right-color: transparent; @@ -6808,7 +6805,7 @@ tr.ant-table-expanded-row:hover { } .ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab-active { background: #fff; - border-color: #e8e8e8; + border-color: @primary-color !important; color: @primary-color; } .ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x { diff --git a/ant-design-jeecg-vue/public/goright.png b/ant-design-jeecg-vue/public/goright.png new file mode 100644 index 0000000000000000000000000000000000000000..13c4b54fd48a01288e9e23084b1adda9a6ffca1e Binary files /dev/null and b/ant-design-jeecg-vue/public/goright.png differ diff --git a/ant-design-jeecg-vue/public/index.html b/ant-design-jeecg-vue/public/index.html index 05d0f5a0aaed458c856a08e3e19b737be189bfb6..9b938e50b876d79ffb3bdd73e45ff3bd8664eaab 100644 --- a/ant-design-jeecg-vue/public/index.html +++ b/ant-design-jeecg-vue/public/index.html @@ -5,7 +5,7 @@ - Jeecg-Boot 快速开发平台(Ant Design Vue) + Jeecg-Boot 快速开发平台 + + @@ -228,7 +234,7 @@
-
正在加载 Jeecg-Boot 快速开发平台(Ant Design Vue),请耐心等待 +
正在加载 Jeecg-Boot 快速开发平台,请耐心等待
diff --git a/ant-design-jeecg-vue/public/logo.png b/ant-design-jeecg-vue/public/logo.png index e887375c355c8045315ca9f39de93ec21d5e71d9..1a55a53c6c4fc39e48bd1fabf24f82c1c12d16de 100644 Binary files a/ant-design-jeecg-vue/public/logo.png and b/ant-design-jeecg-vue/public/logo.png differ diff --git a/ant-design-jeecg-vue/public/tinymce/langs/zh_CN.js b/ant-design-jeecg-vue/public/tinymce/langs/zh_CN.js new file mode 100644 index 0000000000000000000000000000000000000000..0f3cf923efe5e51103f13b1faef4cb1d3fa4f335 --- /dev/null +++ b/ant-design-jeecg-vue/public/tinymce/langs/zh_CN.js @@ -0,0 +1,261 @@ +tinymce.addI18n('zh_CN',{ +"Redo": "\u91cd\u590d", +"Undo": "\u64a4\u6d88", +"Cut": "\u526a\u5207", +"Copy": "\u590d\u5236", +"Paste": "\u7c98\u8d34", +"Select all": "\u5168\u9009", +"New document": "\u65b0\u6587\u6863", +"Ok": "\u786e\u5b9a", +"Cancel": "\u53d6\u6d88", +"Visual aids": "\u7f51\u683c\u7ebf", +"Bold": "\u7c97\u4f53", +"Italic": "\u659c\u4f53", +"Underline": "\u4e0b\u5212\u7ebf", +"Strikethrough": "\u5220\u9664\u7ebf", +"Superscript": "\u4e0a\u6807", +"Subscript": "\u4e0b\u6807", +"Clear formatting": "\u6e05\u9664\u683c\u5f0f", +"Align left": "\u5de6\u5bf9\u9f50", +"Align center": "\u5c45\u4e2d", +"Align right": "\u53f3\u5bf9\u9f50", +"Justify": "\u4e24\u7aef\u5bf9\u9f50", +"Bullet list": "\u9879\u76ee\u7b26\u53f7", +"Numbered list": "\u7f16\u53f7\u5217\u8868", +"Decrease indent": "\u51cf\u5c11\u7f29\u8fdb", +"Increase indent": "\u589e\u52a0\u7f29\u8fdb", +"Close": "\u5173\u95ed", +"Formats": "\u683c\u5f0f", +"Your browser doesn't support direct access to the clipboard. Please use the Ctrl+X\/C\/V keyboard shortcuts instead.": "\u4f60\u7684\u6d4f\u89c8\u5668\u4e0d\u652f\u6301\u5bf9\u526a\u8d34\u677f\u7684\u8bbf\u95ee\uff0c\u8bf7\u4f7f\u7528Ctrl+X\/C\/V\u952e\u8fdb\u884c\u590d\u5236\u7c98\u8d34\u3002", +"Headers": "\u6807\u9898", +"Header 1": "\u6807\u98981", +"Header 2": "\u6807\u98982", +"Header 3": "\u6807\u98983", +"Header 4": "\u6807\u98984", +"Header 5": "\u6807\u98985", +"Header 6": "\u6807\u98986", +"Headings": "\u6807\u9898", +"Heading 1": "\u6807\u98981", +"Heading 2": "\u6807\u98982", +"Heading 3": "\u6807\u98983", +"Heading 4": "\u6807\u98984", +"Heading 5": "\u6807\u98985", +"Heading 6": "\u6807\u98986", +"Preformatted": "\u9884\u683c\u5f0f\u5316", +"Div": "Div\u533a\u5757", +"Pre": "\u9884\u683c\u5f0f\u6587\u672c", +"Code": "\u4ee3\u7801", +"Paragraph": "\u6bb5\u843d", +"Blockquote": "\u5f15\u7528", +"Inline": "\u6587\u672c", +"Blocks": "\u533a\u5757", +"Paste is now in plain text mode. Contents will now be pasted as plain text until you toggle this option off.": "\u5f53\u524d\u4e3a\u7eaf\u6587\u672c\u7c98\u8d34\u6a21\u5f0f\uff0c\u518d\u6b21\u70b9\u51fb\u53ef\u4ee5\u56de\u5230\u666e\u901a\u7c98\u8d34\u6a21\u5f0f\u3002", +"Font Family": "\u5b57\u4f53", +"Font Sizes": "\u5b57\u53f7", +"Class": "Class", +"Browse for an image": "\u6d4f\u89c8\u56fe\u50cf", +"OR": "\u6216", +"Drop an image here": "\u62d6\u653e\u4e00\u5f20\u56fe\u50cf\u81f3\u6b64", +"Upload": "\u4e0a\u4f20", +"Block": "\u5757", +"Align": "\u5bf9\u9f50", +"Default": "\u9ed8\u8ba4", +"Circle": "\u7a7a\u5fc3\u5706", +"Disc": "\u5b9e\u5fc3\u5706", +"Square": "\u65b9\u5757", +"Lower Alpha": "\u5c0f\u5199\u82f1\u6587\u5b57\u6bcd", +"Lower Greek": "\u5c0f\u5199\u5e0c\u814a\u5b57\u6bcd", +"Lower Roman": "\u5c0f\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Upper Alpha": "\u5927\u5199\u82f1\u6587\u5b57\u6bcd", +"Upper Roman": "\u5927\u5199\u7f57\u9a6c\u5b57\u6bcd", +"Anchor": "\u951a\u70b9", +"Name": "\u540d\u79f0", +"Id": "\u6807\u8bc6\u7b26", +"Id should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores.": "\u6807\u8bc6\u7b26\u5e94\u8be5\u4ee5\u5b57\u6bcd\u5f00\u5934\uff0c\u540e\u8ddf\u5b57\u6bcd\u3001\u6570\u5b57\u3001\u7834\u6298\u53f7\u3001\u70b9\u3001\u5192\u53f7\u6216\u4e0b\u5212\u7ebf\u3002", +"You have unsaved changes are you sure you want to navigate away?": "\u4f60\u8fd8\u6709\u6587\u6863\u5c1a\u672a\u4fdd\u5b58\uff0c\u786e\u5b9a\u8981\u79bb\u5f00\uff1f", +"Restore last draft": "\u6062\u590d\u4e0a\u6b21\u7684\u8349\u7a3f", +"Special character": "\u7279\u6b8a\u7b26\u53f7", +"Source code": "\u6e90\u4ee3\u7801", +"Insert\/Edit code sample": "\u63d2\u5165\/\u7f16\u8f91\u4ee3\u7801\u793a\u4f8b", +"Language": "\u8bed\u8a00", +"Code sample": "\u4ee3\u7801\u793a\u4f8b", +"Color": "\u989c\u8272", +"R": "R", +"G": "G", +"B": "B", +"Left to right": "\u4ece\u5de6\u5230\u53f3", +"Right to left": "\u4ece\u53f3\u5230\u5de6", +"Emoticons": "\u8868\u60c5", +"Document properties": "\u6587\u6863\u5c5e\u6027", +"Title": "\u6807\u9898", +"Keywords": "\u5173\u952e\u8bcd", +"Description": "\u63cf\u8ff0", +"Robots": "\u673a\u5668\u4eba", +"Author": "\u4f5c\u8005", +"Encoding": "\u7f16\u7801", +"Fullscreen": "\u5168\u5c4f", +"Action": "\u64cd\u4f5c", +"Shortcut": "\u5feb\u6377\u952e", +"Help": "\u5e2e\u52a9", +"Address": "\u5730\u5740", +"Focus to menubar": "\u79fb\u52a8\u7126\u70b9\u5230\u83dc\u5355\u680f", +"Focus to toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u5de5\u5177\u680f", +"Focus to element path": "\u79fb\u52a8\u7126\u70b9\u5230\u5143\u7d20\u8def\u5f84", +"Focus to contextual toolbar": "\u79fb\u52a8\u7126\u70b9\u5230\u4e0a\u4e0b\u6587\u83dc\u5355", +"Insert link (if link plugin activated)": "\u63d2\u5165\u94fe\u63a5 (\u5982\u679c\u94fe\u63a5\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Save (if save plugin activated)": "\u4fdd\u5b58(\u5982\u679c\u4fdd\u5b58\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Find (if searchreplace plugin activated)": "\u67e5\u627e(\u5982\u679c\u67e5\u627e\u66ff\u6362\u63d2\u4ef6\u5df2\u6fc0\u6d3b)", +"Plugins installed ({0}):": "\u5df2\u5b89\u88c5\u63d2\u4ef6 ({0}):", +"Premium plugins:": "\u4f18\u79c0\u63d2\u4ef6\uff1a", +"Learn more...": "\u4e86\u89e3\u66f4\u591a...", +"You are using {0}": "\u4f60\u6b63\u5728\u4f7f\u7528 {0}", +"Plugins": "\u63d2\u4ef6", +"Handy Shortcuts": "\u5feb\u6377\u952e", +"Horizontal line": "\u6c34\u5e73\u5206\u5272\u7ebf", +"Insert\/edit image": "\u63d2\u5165\/\u7f16\u8f91\u56fe\u7247", +"Image description": "\u56fe\u7247\u63cf\u8ff0", +"Source": "\u5730\u5740", +"Dimensions": "\u5927\u5c0f", +"Constrain proportions": "\u4fdd\u6301\u7eb5\u6a2a\u6bd4", +"General": "\u666e\u901a", +"Advanced": "\u9ad8\u7ea7", +"Style": "\u6837\u5f0f", +"Vertical space": "\u5782\u76f4\u8fb9\u8ddd", +"Horizontal space": "\u6c34\u5e73\u8fb9\u8ddd", +"Border": "\u8fb9\u6846", +"Insert image": "\u63d2\u5165\u56fe\u7247", +"Image": "\u56fe\u7247", +"Image list": "\u56fe\u7247\u5217\u8868", +"Rotate counterclockwise": "\u9006\u65f6\u9488\u65cb\u8f6c", +"Rotate clockwise": "\u987a\u65f6\u9488\u65cb\u8f6c", +"Flip vertically": "\u5782\u76f4\u7ffb\u8f6c", +"Flip horizontally": "\u6c34\u5e73\u7ffb\u8f6c", +"Edit image": "\u7f16\u8f91\u56fe\u7247", +"Image options": "\u56fe\u7247\u9009\u9879", +"Zoom in": "\u653e\u5927", +"Zoom out": "\u7f29\u5c0f", +"Crop": "\u88c1\u526a", +"Resize": "\u8c03\u6574\u5927\u5c0f", +"Orientation": "\u65b9\u5411", +"Brightness": "\u4eae\u5ea6", +"Sharpen": "\u9510\u5316", +"Contrast": "\u5bf9\u6bd4\u5ea6", +"Color levels": "\u989c\u8272\u5c42\u6b21", +"Gamma": "\u4f3d\u9a6c\u503c", +"Invert": "\u53cd\u8f6c", +"Apply": "\u5e94\u7528", +"Back": "\u540e\u9000", +"Insert date\/time": "\u63d2\u5165\u65e5\u671f\/\u65f6\u95f4", +"Date\/time": "\u65e5\u671f\/\u65f6\u95f4", +"Insert link": "\u63d2\u5165\u94fe\u63a5", +"Insert\/edit link": "\u63d2\u5165\/\u7f16\u8f91\u94fe\u63a5", +"Text to display": "\u663e\u793a\u6587\u5b57", +"Url": "\u5730\u5740", +"Target": "\u6253\u5f00\u65b9\u5f0f", +"None": "\u65e0", +"New window": "\u5728\u65b0\u7a97\u53e3\u6253\u5f00", +"Remove link": "\u5220\u9664\u94fe\u63a5", +"Anchors": "\u951a\u70b9", +"Link": "\u94fe\u63a5", +"Paste or type a link": "\u7c98\u8d34\u6216\u8f93\u5165\u94fe\u63a5", +"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u4e3a\u90ae\u4ef6\u5730\u5740\uff0c\u9700\u8981\u52a0\u4e0amailto:\u524d\u7f00\u5417\uff1f", +"The URL you entered seems to be an external link. Do you want to add the required http:\/\/ prefix?": "\u4f60\u6240\u586b\u5199\u7684URL\u5730\u5740\u5c5e\u4e8e\u5916\u90e8\u94fe\u63a5\uff0c\u9700\u8981\u52a0\u4e0ahttp:\/\/:\u524d\u7f00\u5417\uff1f", +"Link list": "\u94fe\u63a5\u5217\u8868", +"Insert video": "\u63d2\u5165\u89c6\u9891", +"Insert\/edit video": "\u63d2\u5165\/\u7f16\u8f91\u89c6\u9891", +"Insert\/edit media": "\u63d2\u5165\/\u7f16\u8f91\u5a92\u4f53", +"Alternative source": "\u955c\u50cf", +"Poster": "\u5c01\u9762", +"Paste your embed code below:": "\u5c06\u5185\u5d4c\u4ee3\u7801\u7c98\u8d34\u5728\u4e0b\u9762:", +"Embed": "\u5185\u5d4c", +"Media": "\u5a92\u4f53", +"Nonbreaking space": "\u4e0d\u95f4\u65ad\u7a7a\u683c", +"Page break": "\u5206\u9875\u7b26", +"Paste as text": "\u7c98\u8d34\u4e3a\u6587\u672c", +"Preview": "\u9884\u89c8", +"Print": "\u6253\u5370", +"Save": "\u4fdd\u5b58", +"Find": "\u67e5\u627e", +"Replace with": "\u66ff\u6362\u4e3a", +"Replace": "\u66ff\u6362", +"Replace all": "\u5168\u90e8\u66ff\u6362", +"Prev": "\u4e0a\u4e00\u4e2a", +"Next": "\u4e0b\u4e00\u4e2a", +"Find and replace": "\u67e5\u627e\u548c\u66ff\u6362", +"Could not find the specified string.": "\u672a\u627e\u5230\u641c\u7d22\u5185\u5bb9.", +"Match case": "\u533a\u5206\u5927\u5c0f\u5199", +"Whole words": "\u5168\u5b57\u5339\u914d", +"Spellcheck": "\u62fc\u5199\u68c0\u67e5", +"Ignore": "\u5ffd\u7565", +"Ignore all": "\u5168\u90e8\u5ffd\u7565", +"Finish": "\u5b8c\u6210", +"Add to Dictionary": "\u6dfb\u52a0\u5230\u5b57\u5178", +"Insert table": "\u63d2\u5165\u8868\u683c", +"Table properties": "\u8868\u683c\u5c5e\u6027", +"Delete table": "\u5220\u9664\u8868\u683c", +"Cell": "\u5355\u5143\u683c", +"Row": "\u884c", +"Column": "\u5217", +"Cell properties": "\u5355\u5143\u683c\u5c5e\u6027", +"Merge cells": "\u5408\u5e76\u5355\u5143\u683c", +"Split cell": "\u62c6\u5206\u5355\u5143\u683c", +"Insert row before": "\u5728\u4e0a\u65b9\u63d2\u5165", +"Insert row after": "\u5728\u4e0b\u65b9\u63d2\u5165", +"Delete row": "\u5220\u9664\u884c", +"Row properties": "\u884c\u5c5e\u6027", +"Cut row": "\u526a\u5207\u884c", +"Copy row": "\u590d\u5236\u884c", +"Paste row before": "\u7c98\u8d34\u5230\u4e0a\u65b9", +"Paste row after": "\u7c98\u8d34\u5230\u4e0b\u65b9", +"Insert column before": "\u5728\u5de6\u4fa7\u63d2\u5165", +"Insert column after": "\u5728\u53f3\u4fa7\u63d2\u5165", +"Delete column": "\u5220\u9664\u5217", +"Cols": "\u5217", +"Rows": "\u884c", +"Width": "\u5bbd", +"Height": "\u9ad8", +"Cell spacing": "\u5355\u5143\u683c\u5916\u95f4\u8ddd", +"Cell padding": "\u5355\u5143\u683c\u5185\u8fb9\u8ddd", +"Caption": "\u6807\u9898", +"Left": "\u5de6\u5bf9\u9f50", +"Center": "\u5c45\u4e2d", +"Right": "\u53f3\u5bf9\u9f50", +"Cell type": "\u5355\u5143\u683c\u7c7b\u578b", +"Scope": "\u8303\u56f4", +"Alignment": "\u5bf9\u9f50\u65b9\u5f0f", +"H Align": "\u6c34\u5e73\u5bf9\u9f50", +"V Align": "\u5782\u76f4\u5bf9\u9f50", +"Top": "\u9876\u90e8\u5bf9\u9f50", +"Middle": "\u5782\u76f4\u5c45\u4e2d", +"Bottom": "\u5e95\u90e8\u5bf9\u9f50", +"Header cell": "\u8868\u5934\u5355\u5143\u683c", +"Row group": "\u884c\u7ec4", +"Column group": "\u5217\u7ec4", +"Row type": "\u884c\u7c7b\u578b", +"Header": "\u8868\u5934", +"Body": "\u8868\u4f53", +"Footer": "\u8868\u5c3e", +"Border color": "\u8fb9\u6846\u989c\u8272", +"Insert template": "\u63d2\u5165\u6a21\u677f", +"Templates": "\u6a21\u677f", +"Template": "\u6a21\u677f", +"Text color": "\u6587\u5b57\u989c\u8272", +"Background color": "\u80cc\u666f\u8272", +"Custom...": "\u81ea\u5b9a\u4e49...", +"Custom color": "\u81ea\u5b9a\u4e49\u989c\u8272", +"No color": "\u65e0", +"Table of Contents": "\u5185\u5bb9\u5217\u8868", +"Show blocks": "\u663e\u793a\u533a\u5757\u8fb9\u6846", +"Show invisible characters": "\u663e\u793a\u4e0d\u53ef\u89c1\u5b57\u7b26", +"Words: {0}": "\u5b57\u6570\uff1a{0}", +"{0} words": "{0} \u5b57", +"File": "\u6587\u4ef6", +"Edit": "\u7f16\u8f91", +"Insert": "\u63d2\u5165", +"View": "\u89c6\u56fe", +"Format": "\u683c\u5f0f", +"Table": "\u8868\u683c", +"Tools": "\u5de5\u5177", +"Powered by {0}": "\u7531{0}\u9a71\u52a8", +"Rich Text Area. Press ALT-F9 for menu. Press ALT-F10 for toolbar. Press ALT-0 for help": "\u5728\u7f16\u8f91\u533a\u6309ALT-F9\u6253\u5f00\u83dc\u5355\uff0c\u6309ALT-F10\u6253\u5f00\u5de5\u5177\u680f\uff0c\u6309ALT-0\u67e5\u770b\u5e2e\u52a9" +}); \ No newline at end of file diff --git a/ant-design-jeecg-vue/public/tinymce/skins/lightgray/content.min.css b/ant-design-jeecg-vue/public/tinymce/skins/lightgray/content.min.css new file mode 100644 index 0000000000000000000000000000000000000000..125b622b39bc54f34698c95f8a0b016d2dabf6b4 --- /dev/null +++ b/ant-design-jeecg-vue/public/tinymce/skins/lightgray/content.min.css @@ -0,0 +1,554 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + */ +.mce-content-body .mce-item-anchor { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'8'%20height%3D'12'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20d%3D'M0%200L8%200%208%2012%204.09117821%209%200%2012z'%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + cursor: default; + display: inline-block; + height: 12px !important; + padding: 0 2px; + -webkit-user-modify: read-only; + -moz-user-modify: read-only; + -webkit-user-select: all; + -moz-user-select: all; + -ms-user-select: all; + user-select: all; + width: 8px !important; +} +.mce-content-body .mce-item-anchor[data-mce-selected] { + outline-offset: 1px; +} +.tox-comments-visible .tox-comment { + background-color: #fff0b7; +} +.tox-comments-visible .tox-comment--active { + background-color: #ffe168; +} +.tox-checklist > li:not(.tox-checklist--hidden) { + list-style: none; + margin: .25em 0; + position: relative; +} +.tox-checklist > li:not(.tox-checklist--hidden)::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-unchecked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2215%22%20height%3D%2215%22%20x%3D%22.5%22%20y%3D%22.5%22%20fill-rule%3D%22nonzero%22%20stroke%3D%22%234C4C4C%22%20rx%3D%222%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); + background-size: 100%; + content: ''; + cursor: pointer; + height: 1em; + left: -1.5em; + position: absolute; + top: .125em; + width: 1em; +} +.tox-checklist li:not(.tox-checklist--hidden).tox-checklist--checked::before { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%3E%3Cg%20id%3D%22checklist-checked%22%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%3Crect%20id%3D%22Rectangle%22%20width%3D%2216%22%20height%3D%2216%22%20fill%3D%22%234099FF%22%20fill-rule%3D%22nonzero%22%20rx%3D%222%22%2F%3E%3Cpath%20id%3D%22Path%22%20fill%3D%22%23FFF%22%20fill-rule%3D%22nonzero%22%20d%3D%22M11.5703186%2C3.14417309%20C11.8516238%2C2.73724603%2012.4164781%2C2.62829933%2012.83558%2C2.89774797%20C13.260121%2C3.17069355%2013.3759736%2C3.72932262%2013.0909105%2C4.14168582%20L7.7580587%2C11.8560195%20C7.43776896%2C12.3193404%206.76483983%2C12.3852142%206.35607322%2C11.9948725%20L3.02491697%2C8.8138662%20C2.66090143%2C8.46625845%202.65798871%2C7.89594698%203.01850234%2C7.54483354%20C3.373942%2C7.19866177%203.94940006%2C7.19592841%204.30829608%2C7.5386474%20L6.85276923%2C9.9684299%20L11.5703186%2C3.14417309%20Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%0A"); +} +/* stylelint-disable */ +/* http://prismjs.com/ */ +/** + * prism.js default theme for JavaScript, CSS and HTML + * Based on dabblet (http://dabblet.com) + * @author Lea Verou + */ +code[class*="language-"], +pre[class*="language-"] { + color: black; + text-shadow: 0 1px white; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: .875rem; + direction: ltr; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.5; + -moz-tab-size: 4; + tab-size: 4; + -webkit-hyphens: none; + -ms-hyphens: none; + hyphens: none; +} +pre[class*="language-"]::-moz-selection, +pre[class*="language-"] ::-moz-selection, +code[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection { + text-shadow: none; + background: #b3d4fc; +} +pre[class*="language-"]::selection, +pre[class*="language-"] ::selection, +code[class*="language-"]::selection, +code[class*="language-"] ::selection { + text-shadow: none; + background: #b3d4fc; +} +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none; + } +} +/* Code blocks */ +pre[class*="language-"] { + padding: 1em; + margin: .5em 0; + overflow: auto; +} +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: transparent !important; + border: 1px solid #ccc; +} +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; +} +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: slategray; +} +.token.punctuation { + color: #999; +} +.namespace { + opacity: .7; +} +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #905; +} +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.inserted { + color: #690; +} +.token.operator, +.token.entity, +.token.url, +.language-css .token.string, +.style .token.string { + color: #a67f59; + background: rgba(255, 255, 255, 0.5); +} +.token.atrule, +.token.attr-value, +.token.keyword { + color: #07a; +} +.token.function { + color: #DD4A68; +} +.token.regex, +.token.important, +.token.variable { + color: #e90; +} +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} +.token.entity { + cursor: help; +} +/* stylelint-enable */ +.mce-content-body .mce-visual-caret { + background-color: black; + background-color: currentcolor; + position: absolute; +} +.mce-content-body .mce-visual-caret-hidden { + display: none; +} +.mce-content-body *[data-mce-caret] { + left: -1000px; + margin: 0; + padding: 0; + position: absolute; + right: auto; + top: 0; +} +.mce-content-body .mce-offscreen-selection { + left: -9999999999px; + max-width: 1000000px; + position: absolute; +} +.mce-content-body *[contentEditable=false] { + cursor: default; +} +.mce-content-body *[contentEditable=true] { + cursor: text; +} +.tox-cursor-format-painter { + cursor: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%20viewBox%3D%220%200%2024%2024%22%3E%0A%20%20%3Cg%20fill%3D%22none%22%20fill-rule%3D%22evenodd%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M15%2C6%20C15%2C5.45%2014.55%2C5%2014%2C5%20L6%2C5%20C5.45%2C5%205%2C5.45%205%2C6%20L5%2C10%20C5%2C10.55%205.45%2C11%206%2C11%20L14%2C11%20C14.55%2C11%2015%2C10.55%2015%2C10%20L15%2C9%20L16%2C9%20L16%2C12%20L9%2C12%20L9%2C19%20C9%2C19.55%209.45%2C20%2010%2C20%20L11%2C20%20C11.55%2C20%2012%2C19.55%2012%2C19%20L12%2C14%20L18%2C14%20L18%2C7%20L15%2C7%20L15%2C6%20Z%22%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23000%22%20fill-rule%3D%22nonzero%22%20d%3D%22M1%2C1%20L8.25%2C1%20C8.66421356%2C1%209%2C1.33578644%209%2C1.75%20L9%2C1.75%20C9%2C2.16421356%208.66421356%2C2.5%208.25%2C2.5%20L2.5%2C2.5%20L2.5%2C8.25%20C2.5%2C8.66421356%202.16421356%2C9%201.75%2C9%20L1.75%2C9%20C1.33578644%2C9%201%2C8.66421356%201%2C8.25%20L1%2C1%20Z%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A"), default; +} +.mce-content-body figure.align-left { + float: left; +} +.mce-content-body figure.align-right { + float: right; +} +.mce-content-body figure.image.align-center { + display: table; + margin-left: auto; + margin-right: auto; +} +.mce-preview-object { + border: 1px solid gray; + display: inline-block; + line-height: 0; + margin: 0 2px 0 2px; + position: relative; +} +.mce-preview-object .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-preview-object[data-mce-selected="2"] .mce-shim { + display: none; +} +.mce-object { + background: transparent url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2224%22%20height%3D%2224%22%3E%3Cpath%20d%3D%22M4%203h16a1%201%200%200%201%201%201v16a1%201%200%200%201-1%201H4a1%201%200%200%201-1-1V4a1%201%200%200%201%201-1zm1%202v14h14V5H5zm4.79%202.565l5.64%204.028a.5.5%200%200%201%200%20.814l-5.64%204.028a.5.5%200%200%201-.79-.407V7.972a.5.5%200%200%201%20.79-.407z%22%2F%3E%3C%2Fsvg%3E%0A") no-repeat center; + border: 1px dashed #aaa; +} +.mce-pagebreak { + border: 1px dashed #aaa; + cursor: default; + display: block; + height: 5px; + margin-top: 15px; + page-break-before: always; + width: 100%; +} +@media print { + .mce-pagebreak { + border: 0; + } +} +.tiny-pageembed .mce-shim { + background: url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7); + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tiny-pageembed[data-mce-selected="2"] .mce-shim { + display: none; +} +.tiny-pageembed { + display: inline-block; + position: relative; +} +.tiny-pageembed--21by9, +.tiny-pageembed--16by9, +.tiny-pageembed--4by3, +.tiny-pageembed--1by1 { + display: block; + overflow: hidden; + padding: 0; + position: relative; + width: 100%; +} +.tiny-pageembed--21by9::before, +.tiny-pageembed--16by9::before, +.tiny-pageembed--4by3::before, +.tiny-pageembed--1by1::before { + content: ""; + display: block; +} +.tiny-pageembed--21by9::before { + padding-top: 42.857143%; +} +.tiny-pageembed--16by9::before { + padding-top: 56.25%; +} +.tiny-pageembed--4by3::before { + padding-top: 75%; +} +.tiny-pageembed--1by1::before { + padding-top: 100%; +} +.tiny-pageembed--21by9 iframe, +.tiny-pageembed--16by9 iframe, +.tiny-pageembed--4by3 iframe, +.tiny-pageembed--1by1 iframe { + border: 0; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.mce-content-body div.mce-resizehandle { + background-color: #4099ff; + border-color: #4099ff; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + height: 10px; + position: absolute; + width: 10px; + z-index: 10000; +} +.mce-content-body div.mce-resizehandle:hover { + background-color: #4099ff; +} +.mce-content-body div.mce-resizehandle:nth-of-type(1) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(2) { + cursor: nesw-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(3) { + cursor: nwse-resize; +} +.mce-content-body div.mce-resizehandle:nth-of-type(4) { + cursor: nesw-resize; +} +.mce-content-body .mce-clonedresizable { + opacity: .5; + outline: 1px dashed black; + position: absolute; + z-index: 10000; +} +.mce-content-body .mce-resize-helper { + background: #555; + background: rgba(0, 0, 0, 0.75); + border: 1px; + border-radius: 3px; + color: white; + display: none; + font-family: sans-serif; + font-size: 12px; + line-height: 14px; + margin: 5px 10px; + padding: 5px; + position: absolute; + white-space: nowrap; + z-index: 10001; +} +.mce-match-marker { + background: #aaa; + color: #fff; +} +.mce-match-marker-selected { + background: #39f; + color: #fff; +} +.mce-content-body img[data-mce-selected], +.mce-content-body table[data-mce-selected] { + outline: 3px solid #b4d7ff; +} +.mce-content-body hr[data-mce-selected] { + outline: 3px solid #b4d7ff; + outline-offset: 1px; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false] *[contentEditable=true]:hover { + outline: 3px solid #b4d7ff; +} +.mce-content-body *[contentEditable=false][data-mce-selected] { + cursor: not-allowed; + outline: 3px solid #b4d7ff; +} +.mce-content-body.mce-content-readonly *[contentEditable=true]:focus, +.mce-content-body.mce-content-readonly *[contentEditable=true]:hover { + outline: none; +} +.mce-content-body *[data-mce-selected="inline-boundary"] { + background-color: #b4d7ff; +} +.mce-content-body .mce-edit-focus { + outline: 3px solid #b4d7ff; +} +.mce-content-body td[data-mce-selected], +.mce-content-body th[data-mce-selected] { + background-color: #b4d7ff !important; +} +.mce-content-body td[data-mce-selected]::-moz-selection, +.mce-content-body th[data-mce-selected]::-moz-selection { + background: none; +} +.mce-content-body td[data-mce-selected]::selection, +.mce-content-body th[data-mce-selected]::selection { + background: none; +} +.mce-content-body td[data-mce-selected] *, +.mce-content-body th[data-mce-selected] * { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.mce-content-body img::-moz-selection { + background: none; +} +.mce-content-body img::selection { + background: none; +} +.ephox-snooker-resizer-bar { + background-color: #b4d7ff; + opacity: 0; +} +.ephox-snooker-resizer-cols { + cursor: col-resize; +} +.ephox-snooker-resizer-rows { + cursor: row-resize; +} +.ephox-snooker-resizer-bar.ephox-snooker-resizer-bar-dragging { + opacity: 1; +} +.mce-spellchecker-word { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23ff0000'%20fill%3D'none'%20stroke-linecap%3D'round'%20stroke-opacity%3D'.5'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; + height: 2rem; +} +.mce-spellchecker-grammar { + background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D'4'%20height%3D'4'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%3E%3Cpath%20stroke%3D'%23008800'%20fill%3D'none'%20stroke-linecap%3D'round'%20d%3D'M0%203L2%201%204%203'%2F%3E%3C%2Fsvg%3E%0A"); + background-position: 0 calc(100% + 1px); + background-repeat: repeat-x; + background-size: auto 6px; + cursor: default; +} +.mce-toc { + border: 1px solid gray; +} +.mce-toc h2 { + margin: 4px; +} +.mce-toc li { + list-style-type: none; +} +.mce-item-table, +.mce-item-table td, +.mce-item-table th, +.mce-item-table caption { + border: 1px dashed #bbb; +} +.mce-visualblocks p, +.mce-visualblocks h1, +.mce-visualblocks h2, +.mce-visualblocks h3, +.mce-visualblocks h4, +.mce-visualblocks h5, +.mce-visualblocks h6, +.mce-visualblocks div:not([data-mce-bogus]), +.mce-visualblocks section, +.mce-visualblocks article, +.mce-visualblocks blockquote, +.mce-visualblocks address, +.mce-visualblocks pre, +.mce-visualblocks figure, +.mce-visualblocks figcaption, +.mce-visualblocks hgroup, +.mce-visualblocks aside, +.mce-visualblocks ul, +.mce-visualblocks ol, +.mce-visualblocks dl { + background-repeat: no-repeat; + border: 1px dashed #bbb; + margin-left: 3px; + padding-top: 10px; +} +.mce-visualblocks p { + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); +} +.mce-visualblocks h1 { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); +} +.mce-visualblocks h2 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); +} +.mce-visualblocks h3 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); +} +.mce-visualblocks h4 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); +} +.mce-visualblocks h5 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); +} +.mce-visualblocks h6 { + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); +} +.mce-visualblocks div:not([data-mce-bogus]) { + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); +} +.mce-visualblocks section { + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); +} +.mce-visualblocks article { + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); +} +.mce-visualblocks blockquote { + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); +} +.mce-visualblocks address { + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); +} +.mce-visualblocks pre { + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); +} +.mce-visualblocks figure { + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); +} +.mce-visualblocks figcaption { + border: 1px dashed #bbb; +} +.mce-visualblocks hgroup { + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); +} +.mce-visualblocks aside { + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); +} +.mce-visualblocks ul { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); +} +.mce-visualblocks ol { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); +} +.mce-visualblocks dl { + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); +} +.mce-nbsp, +.mce-shy { + background: #aaa; +} +.mce-shy::after { + content: '-'; +} +body { + font-family: sans-serif; +} +table { + border-collapse: collapse; +} diff --git a/ant-design-jeecg-vue/public/tinymce/skins/lightgray/skin.min.css b/ant-design-jeecg-vue/public/tinymce/skins/lightgray/skin.min.css new file mode 100644 index 0000000000000000000000000000000000000000..3ea9b442b60b24d7d2bc5692706ca0eb1c8ebf00 --- /dev/null +++ b/ant-design-jeecg-vue/public/tinymce/skins/lightgray/skin.min.css @@ -0,0 +1,2159 @@ +/** + * Copyright (c) Tiny Technologies, Inc. All rights reserved. + * Licensed under the LGPL or a commercial license. + * For LGPL see License.txt in the project root for license information. + * For commercial licenses see https://www.tiny.cloud/ + */ +.tox, +.tox *:not(svg) { + background: transparent; + border: 0; + box-sizing: content-box; + color: #222f3e; + cursor: auto; + direction: ltr; + float: none; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-style: normal; + font-weight: normal; + height: auto; + line-height: normal; + margin: 0; + max-width: none; + outline: 0; + padding: 0; + position: static; + -webkit-tap-highlight-color: transparent; + text-align: left; + text-decoration: none; + text-shadow: none; + text-transform: none; + vertical-align: initial; + white-space: normal; + width: auto; +} +.tox *:not(svg) { + color: inherit; + cursor: inherit; + font-size: inherit; +} +.tox-tinymce { + border: 1px solid #cccccc; + border-radius: 0; + box-shadow: none; + box-sizing: border-box; + display: flex; + flex-direction: column; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + overflow: hidden; + visibility: inherit !important; +} +.tox-editor-container { + display: flex; + flex: 1 1 auto; + flex-direction: column; + overflow: hidden; +} +.tox-editor-container > *:first-child { + border-top: none !important; +} +.tox-tinymce-aux { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; +} +.tox-tinymce *:focus, +.tox-tinymce-aux *:focus { + outline: none; +} +button::-moz-focus-inner { + border: 0; +} +.tox-silver-sink { + z-index: 1300; +} +.tox[dir='rtl'] { + direction: rtl; +} +.tox[dir='rtl'] .tox-statusbar__resize-handle { + justify-content: flex-start; + margin-left: -8px; + margin-right: 0; + padding-left: 0; + padding-right: 1ch; +} +.tox[dir='rtl'] .tox-statusbar .tox-statusbar__path { + text-align: right; +} +.tox .tox-anchorbar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-bar { + display: flex; + flex: 0 0 auto; +} +.tox .tox-button { + background-color: #3498db; + background-image: none; + background-position: none; + background-repeat: none; + border-color: #3498db; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #fff; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 14px; + font-weight: bold; + letter-spacing: 1; + line-height: 24px; + margin: 0; + outline: none; + padding: 4px 16px; + text-align: center; + text-decoration: none; + text-transform: capitalize; + white-space: nowrap; +} +.tox .tox-button[disabled] { + background-color: #3498db; + background-image: none; + border-color: #3498db; + box-shadow: none; + color: rgba(255, 255, 255, 0.5); + cursor: not-allowed; +} +.tox .tox-button:focus:not(:disabled) { + background-color: #258cd1; + background-image: none; + border-color: #258cd1; + box-shadow: none; + color: #fff; +} +.tox .tox-button:hover:not(:disabled) { + background-color: #258cd1; + background-image: none; + border-color: #258cd1; + box-shadow: none; + color: #fff; +} +.tox .tox-button:active:not(:disabled) { + background-color: #217dbb; + background-image: none; + border-color: #217dbb; + box-shadow: none; + color: #fff; +} +.tox .tox-button--secondary { + background-color: #f0f0f0; + background-image: none; + background-position: none; + background-repeat: none; + border-color: #f0f0f0; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + color: #222f3e; + outline: none; + padding: 4px 16px; + text-decoration: none; + text-transform: capitalize; +} +.tox .tox-button--secondary[disabled] { + background-color: #f0f0f0; + background-image: none; + border-color: #f0f0f0; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-button--secondary:focus:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:hover:not(:disabled) { + background-color: #e3e3e3; + background-image: none; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--secondary:active:not(:disabled) { + background-color: #d6d6d6; + background-image: none; + border-color: #d6d6d6; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--icon, +.tox .tox-button.tox-button--icon, +.tox .tox-button.tox-button--secondary.tox-button--icon { + padding: 4px; +} +.tox .tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--icon .tox-icon svg, +.tox .tox-button.tox-button--secondary.tox-button--icon .tox-icon svg { + display: block; + fill: currentColor; +} +.tox .tox-button-link { + background: 0; + border: none; + box-sizing: border-box; + cursor: pointer; + display: inline-block; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + font-weight: normal; + line-height: 1.3; + margin: 0; + padding: 0; + white-space: nowrap; +} +.tox .tox-button-link--sm { + font-size: 14px; +} +.tox .tox-button--naked { + background-color: transparent; + border-color: transparent; + box-shadow: unset; + color: #222f3e; +} +.tox .tox-button--naked:hover:not(:disabled) { + background-color: #e3e3e3; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked:focus:not(:disabled) { + background-color: #e3e3e3; + border-color: #e3e3e3; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked:active:not(:disabled) { + background-color: #d6d6d6; + border-color: #d6d6d6; + box-shadow: none; + color: #222f3e; +} +.tox .tox-button--naked .tox-icon svg { + fill: currentColor; +} +.tox .tox-button--naked.tox-button--icon { + color: currentColor; +} +.tox .tox-button--naked.tox-button--icon:hover:not(:disabled) { + color: #222f3e; +} +.tox .tox-checkbox { + align-items: center; + border-radius: 3px; + cursor: pointer; + display: flex; + height: 36px; + min-width: 36px; +} +.tox .tox-checkbox__input { + /* Hide from view but visible to screen readers */ + height: 1px; + left: -10000px; + overflow: hidden; + position: absolute; + top: auto; + width: 1px; +} +.tox .tox-checkbox__icons { + border-radius: 3px; + box-shadow: 0 0 0 2px transparent; + height: 24px; + padding: calc(3px); + width: 24px; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: block; + fill: rgba(34, 47, 62, 0.3); +} +.tox .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: none; + fill: #3498db; +} +.tox .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: none; + fill: #3498db; +} +.tox .tox-checkbox__label { + margin-left: 4px; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:checked + .tox-checkbox__icons .tox-checkbox-icon__checked svg { + display: block; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__unchecked svg { + display: none; +} +.tox input.tox-checkbox__input:indeterminate + .tox-checkbox__icons .tox-checkbox-icon__indeterminate svg { + display: block; +} +.tox input.tox-checkbox__input:focus + .tox-checkbox__icons { + border-radius: 3px; + box-shadow: inset 0 0 0 1px #3498db; + padding: calc(3px); +} +.tox .tox-bar .tox-checkbox { + margin-left: 4px; +} +.tox .tox-collection--toolbar .tox-collection__group { + display: flex; + padding: 0; +} +.tox .tox-collection--grid .tox-collection__group { + display: flex; + flex-wrap: wrap; + max-height: 208px; + overflow-x: hidden; + overflow-y: auto; + padding: 0; +} +.tox .tox-collection--list .tox-collection__group { + border-bottom-width: 0; + border-color: #cccccc; + border-left-width: 0; + border-right-width: 0; + border-style: solid; + border-top-width: 1px; + padding: 4px 0; +} +.tox .tox-collection--list .tox-collection__group:first-child { + border-top-width: 0; +} +.tox .tox-collection__group-heading { + background-color: #e6e6e6; + color: rgba(34, 47, 62, 0.6); + cursor: default; + font-size: 12px; + font-style: normal; + font-weight: normal; + margin-bottom: 4px; + margin-top: -4px; + padding: 4px 8px; + text-transform: none; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tox .tox-collection__item { + align-items: center; + color: #222f3e; + cursor: pointer; + display: flex; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.tox .tox-collection__item--state-disabled { + background-color: unset; + color: rgba(34, 47, 62, 0.5); + cursor: default; +} +.tox .tox-collection--list .tox-collection__item { + padding: 4px 8px; +} +.tox .tox-collection--toolbar .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--grid .tox-collection__item { + border-radius: 3px; + padding: 4px; +} +.tox .tox-collection--list .tox-collection__item--enabled { + background-color: inherit; + color: contrast(inherit, #222f3e, #fff); +} +.tox .tox-collection--list .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--enabled { + background-color: #c8cbcf; + color: #222f3e; +} +.tox .tox-collection--toolbar .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--enabled { + background-color: #c8cbcf; + color: #222f3e; +} +.tox .tox-collection--grid .tox-collection__item--active { + background-color: #dee0e2; + color: #222f3e; +} +.tox .tox-collection__item-icon { + align-items: center; + display: flex; + height: 24px; + justify-content: center; + width: 24px; +} +.tox .tox-collection__item-icon svg { + fill: currentColor; +} +.tox .tox-collection--toolbar-lg .tox-collection__item-icon { + height: 48px; + width: 48px; +} +.tox .tox-collection--list .tox-collection__item > *:not(:first-child) { + margin-left: 8px; +} +.tox .tox-collection__item[role="menuitemcheckbox"]:not(.tox-collection__item--enabled) .tox-collection__item-checkmark svg { + display: none; +} +.tox .tox-collection__item-label { + color: currentColor; + display: inline-block; + flex: 1; + -ms-flex-preferred-size: auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 24px; + text-transform: none; + word-break: break-all; +} +.tox .tox-collection--list .tox-collection__item-label:first-child { + margin-left: 4px; +} +.tox .tox-collection__item-accessory { + color: rgba(34, 47, 62, 0.6); + display: inline-block; + font-size: 14px; + height: 24px; + line-height: 24px; + margin-left: 16px; + text-align: right; + text-transform: normal; +} +.tox .tox-collection__item-caret { + align-items: center; + display: flex; + margin-left: 16px; + min-height: 24px; +} +.tox .tox-color-picker-container { + display: flex; + flex-direction: row; + height: 225px; + margin: 0; +} +.tox .tox-sv-palette { + border: 1px solid black; + box-sizing: border-box; + display: flex; + height: 100%; + margin-right: 15px; +} +.tox .tox-sv-palette-spectrum { + height: 100%; +} +.tox .tox-sv-palette, +.tox .tox-sv-palette-spectrum { + width: 225px; +} +.tox .tox-sv-palette-thumb { + background: none; + border: 1px solid black; + border-radius: 50%; + height: 12px; + position: absolute; + width: 12px; +} +.tox .tox-sv-palette-inner-thumb { + border: 1px solid white; + border-radius: 50%; + height: 10px; + position: absolute; + width: 10px; +} +.tox .tox-hue-slider { + border: 1px solid black; + box-sizing: border-box; + height: 100%; + margin-right: 15px; + width: 25px; +} +.tox .tox-hue-slider-spectrum { + background: linear-gradient(to bottom, #f00, #ff0080, #f0f, #8000ff, #00f, #0080ff, #0ff, #00ff80, #0f0, #80ff00, #ff0, #ff8000, #f00); + height: 100%; + width: 100%; +} +.tox .tox-hue-slider, +.tox .tox-hue-slider-spectrum { + width: 20px; +} +.tox .tox-hue-slider-thumb { + background: white; + border: 1px solid black; + height: 4px; + margin-left: -1px; + width: 100%; +} +.tox .tox-rgb-form { + display: flex; + flex-direction: column; + justify-content: space-between; +} +.tox .tox-rgb-form div { + align-items: center; + display: flex; + justify-content: space-between; + margin-bottom: 5px; + width: inherit; +} +.tox .tox-rgb-form input { + width: 6em; +} +.tox .tox-rgb-form input.tox-invalid { + /* Need !important to override Chrome's focus styling unfortunately */ + border: 1px solid red !important; +} +.tox .tox-rgb-form label { + margin-right: .5em; +} +.tox .tox-rgb-form .tox-rgba-preview { + border: 1px solid black; + flex-grow: 2; + margin-bottom: 0; +} +.tox .tox-toolbar .tox-swatches, +.tox .tox-toolbar__primary .tox-swatches, +.tox .tox-toolbar__overflow .tox-swatches { + margin: 2px 0 3px 4px; +} +.tox .tox-swatches__row { + display: flex; +} +.tox .tox-swatch { + height: 30px; + transition: transform 0.15s, box-shadow 0.15s; + width: 30px; +} +.tox .tox-swatch:hover, +.tox .tox-swatch:focus { + box-shadow: 0 0 0 1px rgba(127, 127, 127, 0.3) inset; + transform: scale(0.8); +} +.tox .tox-swatch--remove { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-swatch--remove svg path { + stroke: #e74c3c; +} +.tox .tox-swatches__picker-btn { + align-items: center; + background-color: transparent; + border: 0; + cursor: pointer; + display: flex; + height: 30px; + justify-content: center; + margin-left: auto; + outline: none; + padding: 0; + width: 30px; +} +.tox .tox-swatches__picker-btn svg { + height: 24px; + width: 24px; +} +.tox .tox-swatches__picker-btn:hover { + background: #dee0e2; +} +.tox .tox-comment-thread { + background: #fff; + position: relative; +} +.tox .tox-comment-thread > *:not(:first-child) { + margin-top: 8px; +} +.tox .tox-comment { + background: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + padding: 8px 8px 16px 8px; + position: relative; +} +.tox .tox-comment__header { + align-items: center; + color: #222f3e; + display: flex; + justify-content: space-between; +} +.tox .tox-comment__date { + color: rgba(34, 47, 62, 0.6); + font-size: 12px; +} +.tox .tox-comment__body { + color: #222f3e; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin-top: 8px; + position: relative; + text-transform: initial; +} +.tox .tox-comment__body textarea { + resize: none; + white-space: normal; + width: 100%; +} +.tox .tox-comment__expander { + padding-top: 8px; +} +.tox .tox-comment__expander p { + color: rgba(34, 47, 62, 0.6); + font-size: 14px; + font-style: normal; +} +.tox .tox-comment__body p { + margin: 0; +} +.tox .tox-comment__buttonspacing { + padding-top: 16px; + text-align: center; +} +.tox .tox-comment__buttonspacing > *:last-child { + margin-left: 8px; +} +.tox .tox-comment-thread__overlay::after { + background: #fff; + bottom: 0; + content: ""; + display: flex; + left: 0; + opacity: .9; + position: absolute; + right: 0; + top: 0; + z-index: 5; +} +.tox .tox-comment__reply { + display: flex; + flex-shrink: 0; + flex-wrap: wrap; + justify-content: flex-end; + margin-top: 8px; +} +.tox .tox-comment__reply > *:first-child { + margin-bottom: 8px; + width: 100%; +} +.tox .tox-comment__reply > *:last-child { + margin-left: 8px; +} +.tox .tox-comment__edit { + display: flex; + flex-wrap: wrap; + justify-content: flex-end; + margin-left: 8px; + margin-top: 16px; +} +.tox .tox-comment__edit > *:last-child { + margin-left: 8px; +} +.tox .tox-comment__gradient::after { + background: linear-gradient(rgba(255, 255, 255, 0), #fff); + bottom: 0; + content: ""; + display: block; + height: 5em; + margin-top: -40px; + position: absolute; + width: 100%; +} +.tox .tox-comment__overlay { + background: #fff; + bottom: 0; + display: flex; + flex-direction: column; + flex-grow: 1; + left: 0; + opacity: .9; + position: absolute; + right: 0; + text-align: center; + top: 0; + z-index: 5; +} +.tox .tox-comment__loading-text { + align-items: center; + color: #222f3e; + display: flex; + flex-direction: column; + position: relative; +} +.tox .tox-comment__loading-text > div { + padding-bottom: 16px; +} +.tox .tox-comment__overlaytext { + bottom: 0; + flex-direction: column; + font-size: 14px; + left: 0; + padding: 1em; + position: absolute; + right: 0; + top: 0; + z-index: 10; +} +.tox .tox-comment__overlaytext p { + background-color: #fff; + box-shadow: 0 0 8px 8px #fff; + color: #222f3e; + text-align: center; +} +.tox .tox-comment__overlaytext div:nth-of-type(2) { + font-size: .8em; +} +.tox .tox-comment__busy-spinner { + align-items: center; + background-color: #fff; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1103; +} +.tox .tox-comment__scroll { + display: flex; + flex-direction: column; + flex-shrink: 1; + overflow: auto; +} +.tox .tox-conversations { + margin: 8px; +} +.tox .tox-user { + align-items: center; + display: flex; +} +.tox .tox-user__avatar svg { + fill: rgba(34, 47, 62, 0.6); + margin-right: 8px; +} +.tox .tox-user__name { + color: rgba(34, 47, 62, 0.6); + font-size: 12px; + font-style: normal; + font-weight: bold; + text-transform: uppercase; +} +.tox .tox-user__avatar + .tox-user__name { + margin-left: 8px; +} +.tox .tox-dialog-wrap { + align-items: center; + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: fixed; + right: 0; + top: 0; + z-index: 1100; +} +.tox .tox-dialog-wrap__backdrop { + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1101; +} +.tox .tox-dialog { + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: 0 16px 16px -10px rgba(34, 47, 62, 0.15), 0 0 40px 1px rgba(34, 47, 62, 0.15); + display: flex; + flex-direction: column; + max-height: 100%; + max-width: 480px; + overflow: hidden; + position: relative; + width: 95vw; + z-index: 1102; +} +.tox .tox-dialog__header { + align-items: center; + background-color: #fff; + border-bottom: none; + color: #222f3e; + display: flex; + font-size: 16px; + justify-content: space-between; + margin-bottom: 16px; + padding: 8px 16px 0 16px; + position: relative; +} +.tox .tox-dialog__header .tox-button { + z-index: 1; +} +.tox .tox-dialog__draghandle { + cursor: grab; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; +} +.tox .tox-dialog__draghandle:active { + cursor: grabbing; +} +.tox .tox-dialog__dismiss { + margin-left: auto; +} +.tox .tox-dialog__title { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 20px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + margin: 0; + text-transform: normal; +} +.tox .tox-dialog__body { + color: #222f3e; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + font-size: 16px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 16px; + text-align: left; + text-transform: normal; +} +.tox .tox-dialog__body-nav { + align-items: flex-start; + display: flex; + flex-direction: column; + margin-right: 32px; +} +.tox .tox-dialog__body-nav-item { + border-bottom: 2px solid transparent; + color: rgba(34, 47, 62, 0.6); + display: inline-block; + font-size: 14px; + line-height: 1.3; + margin-bottom: 8px; + text-decoration: none; +} +.tox .tox-dialog__body-nav-item--active { + border-bottom: 2px solid #3498db; + color: #3498db; +} +.tox .tox-dialog__body-content { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; + max-height: 650px; + overflow: auto; +} +.tox .tox-dialog__body-content > * { + margin-bottom: 0; + margin-top: 16px; +} +.tox .tox-dialog__body-content > *:first-child { + margin-top: 0; +} +.tox .tox-dialog__body-content > *:last-child { + margin-bottom: 0; +} +.tox .tox-dialog__body-content > *:only-child { + margin-bottom: 0; + margin-top: 0; +} +.tox .tox-dialog--width-lg { + height: 650px; + max-width: 1200px; +} +.tox .tox-dialog--width-md { + max-width: 800px; +} +.tox .tox-dialog--width-md .tox-dialog__body-content { + overflow: auto; +} +.tox .tox-dialog__body-content--centered { + text-align: center; +} +.tox .tox-dialog__body-content--spacious { + margin-bottom: 16px; +} +.tox .tox-dialog__footer { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + justify-content: space-between; + margin-top: 16px; + padding: 8px 16px; +} +.tox .tox-dialog__footer .tox-dialog__footer-start > *, +.tox .tox-dialog__footer .tox-dialog__footer-end > * { + margin-left: 8px; +} +.tox .tox-dialog__busy-spinner { + align-items: center; + background-color: rgba(255, 255, 255, 0.75); + bottom: 0; + display: flex; + justify-content: center; + left: 0; + position: absolute; + right: 0; + top: 0; + z-index: 1103; +} +.tox .tox-dialog__table { + border-collapse: collapse; + width: 100%; +} +.tox .tox-dialog__table thead th { + font-weight: bold; + padding-bottom: 8px; +} +.tox .tox-dialog__table tbody tr { + border-bottom: 1px solid #cccccc; +} +.tox .tox-dialog__table tbody tr:last-child { + border-bottom: none; +} +.tox .tox-dialog__table td { + padding-bottom: 8px; + padding-top: 8px; +} +.tox .tox-dialog__popups { + position: absolute; + width: 100%; + z-index: 1100; +} +body.tox-dialog__disable-scroll { + overflow: hidden; +} +.tox .tox-dropzone-container { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-dropzone { + align-items: center; + background: #fff; + border: 2px dashed #cccccc; + box-sizing: border-box; + display: flex; + flex-direction: column; + flex-grow: 1; + justify-content: center; + min-height: 100px; + padding: 10px; +} +.tox .tox-dropzone p { + color: rgba(34, 47, 62, 0.6); + margin: 0 0 16px 0; +} +.tox .tox-edit-area { + border-top: 1px solid #cccccc; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + overflow: hidden; + position: relative; +} +.tox .tox-edit-area__iframe { + background-color: #fff; + border: 0; + box-sizing: border-box; + flex: 1; + -ms-flex-preferred-size: auto; + height: 100%; + position: absolute; + width: 100%; +} +.tox.tox-inline-edit-area { + border: 1px dotted #cccccc; +} +.tox .tox-control-wrap { + flex: 1; + position: relative; +} +.tox .tox-control-wrap:not(.tox-control-wrap--status-invalid) .tox-control-wrap__status-icon-invalid, +.tox .tox-control-wrap:not(.tox-control-wrap--status-unknown) .tox-control-wrap__status-icon-unknown, +.tox .tox-control-wrap:not(.tox-control-wrap--status-valid) .tox-control-wrap__status-icon-valid { + display: none; +} +.tox .tox-control-wrap svg { + display: block; +} +.tox .tox-control-wrap .tox-textfield { + padding-right: 32px; +} +.tox .tox-control-wrap__status-icon-wrap { + position: absolute; + right: 4px; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-control-wrap__status-icon-invalid svg { + fill: #c00; +} +.tox .tox-control-wrap__status-icon-unknown svg { + fill: orange; +} +.tox .tox-control-wrap__status-icon-valid svg { + fill: transparent; +} +.tox .tox-autocompleter { + max-width: 25em; +} +.tox .tox-autocompleter .tox-menu { + max-width: 25em; +} +.tox .tox-color-input { + display: flex; +} +.tox .tox-color-input .tox-textfield { + border-radius: 3px 0 0 3px; + display: flex; +} +.tox .tox-color-input span { + border-color: rgba(34, 47, 62, 0.2); + border-radius: 0 3px 3px 0; + border-style: solid; + border-width: 1px 1px 1px 0; + box-shadow: none; + box-sizing: border-box; + cursor: pointer; + display: flex; + width: 35px; +} +.tox .tox-color-input span:focus { + border-color: #3498db; +} +.tox .tox-label, +.tox .tox-toolbar-label { + color: rgba(34, 47, 62, 0.6); + display: block; + font-size: 14px; + font-style: normal; + font-weight: normal; + line-height: 1.3; + padding: 0 8px 0 0; + text-transform: normal; + white-space: nowrap; +} +.tox .tox-toolbar-label { + padding: 0 8px; +} +.tox .tox-form { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group { + box-sizing: border-box; + margin-bottom: 4px; +} +.tox .tox-form__group--error { + color: #c00; +} +.tox .tox-form__group--collection { + display: flex; +} +.tox .tox-form__grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: space-between; +} +.tox .tox-form__grid--2col > .tox-form__group { + width: calc(50% - (8px / 2)); +} +.tox .tox-form__grid--3col > .tox-form__group { + width: calc(100% / 3 - (8px / 2)); +} +.tox .tox-form__grid--4col > .tox-form__group { + width: calc(25% - (8px / 2)); +} +.tox .tox-form__controls-h-stack { + align-items: center; + display: flex; +} +.tox .tox-form__controls-h-stack > *:not(:first-child) { + margin-left: 4px; +} +.tox .tox-form__group--inline { + align-items: center; + display: flex; +} +.tox .tox-form__group--stretched { + display: flex; + flex: 1; + flex-direction: column; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-textarea { + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-navobj { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-form__group--stretched .tox-navobj :nth-child(2) { + flex: 1; + -ms-flex-preferred-size: auto; + height: 100%; +} +.tox .tox-lock.tox-locked .tox-lock-icon__unlock, +.tox .tox-lock:not(.tox-locked) .tox-lock-icon__lock { + display: none; +} +.tox .tox-selectfield { + cursor: pointer; + position: relative; +} +.tox .tox-selectfield select { + padding-right: 24px; +} +.tox .tox-selectfield select::-ms-expand { + display: none; +} +.tox .tox-selectfield svg { + pointer-events: none; + position: absolute; + right: 8px; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-textarea { + white-space: pre-wrap; +} +.tox .tox-textfield, +.tox .tox-selectfield select, +.tox .tox-textarea, +.tox .tox-toolbar-textfield { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + background-color: #fff; + border-color: #cccccc; + border-radius: 3px; + border-style: solid; + border-width: 1px; + box-shadow: none; + box-sizing: border-box; + color: #222f3e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; + font-size: 16px; + line-height: 24px; + margin: 0; + outline: none; + padding: 5px 4.75px; + resize: none; + width: 100%; +} +.tox .tox-textfield:focus, +.tox .tox-selectfield select:focus, +.tox .tox-textarea:focus { + border-color: #3498db; + box-shadow: none; + outline: none; +} +.tox .tox-toolbar-textfield { + border-width: 0; + margin-bottom: 3px; + margin-top: 2px; + max-width: 250px; +} +.tox .tox-toolbar-textfield + * { + margin-left: 4px; +} +.tox .tox-naked-btn { + background-color: transparent; + border: 0; + border-color: transparent; + box-shadow: unset; + color: #3498db; + cursor: pointer; + display: block; + margin: 0; + padding: 0; +} +.tox .tox-naked-btn svg { + display: block; + fill: #222f3e; +} +.tox-fullscreen { + border: 0; + height: 100%; + left: 0; + margin: 0; + overflow: hidden; + padding: 0; + position: fixed; + top: 0; + width: 100%; +} +.tox-fullscreen .tox .tox-statusbar__resize-handle { + display: none; +} +.tox-fullscreen .tox.tox-tinymce { + z-index: 1200; +} +.tox-fullscreen .tox.tox-tinymce-aux { + z-index: 1201; +} +.tox .tox-image-tools { + width: 100%; +} +.tox .tox-image-tools__toolbar { + align-items: center; + display: flex; + justify-content: center; +} +.tox .tox-image-tools__image { + background-color: #666; + height: 380px; + overflow: auto; + position: relative; + width: 100%; +} +.tox .tox-image-tools__image, +.tox .tox-image-tools__image + .tox-image-tools__toolbar { + margin-top: 8px; +} +.tox .tox-image-tools__image-bg { + background: url(data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==); +} +.tox .tox-image-tools__toolbar > .tox-slider:not(:first-of-type) { + margin-left: 8px; +} +.tox .tox-image-tools__toolbar > .tox-button + .tox-slider { + margin-left: 32px; +} +.tox .tox-image-tools__toolbar > .tox-slider + .tox-button { + margin-left: 32px; +} +.tox .tox-image-tools__toolbar > .tox-spacer { + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-croprect-block { + background: black; + filter: alpha(opacity=50); + opacity: .5; + position: absolute; + zoom: 1; +} +.tox .tox-croprect-handle { + border: 2px solid white; + height: 20px; + left: 0; + position: absolute; + top: 0; + width: 20px; +} +.tox .tox-croprect-handle-move { + border: 0; + cursor: move; + position: absolute; +} +.tox .tox-croprect-handle-nw { + border-width: 2px 0 0 2px; + cursor: nw-resize; + left: 100px; + margin: -2px 0 0 -2px; + top: 100px; +} +.tox .tox-croprect-handle-ne { + border-width: 2px 2px 0 0; + cursor: ne-resize; + left: 200px; + margin: -2px 0 0 -20px; + top: 100px; +} +.tox .tox-croprect-handle-sw { + border-width: 0 0 2px 2px; + cursor: sw-resize; + left: 100px; + margin: -20px 2px 0 -2px; + top: 200px; +} +.tox .tox-croprect-handle-se { + border-width: 0 2px 2px 0; + cursor: se-resize; + left: 200px; + margin: -20px 0 0 -20px; + top: 200px; +} +.tox .tox-insert-table-picker { + display: flex; + flex-wrap: wrap; + width: 169px; +} +.tox .tox-insert-table-picker > div { + border-color: #cccccc; + border-style: solid; + border-width: 0 1px 1px 0; + box-sizing: content-box; + height: 16px; + width: 16px; +} +.tox .tox-insert-table-picker > div:nth-child(10n) { + border-right: 0; +} +.tox .tox-collection--list .tox-collection__group .tox-insert-table-picker { + margin: -4px 0; +} +.tox .tox-insert-table-picker .tox-insert-table-picker__selected { + background-color: rgba(52, 152, 219, 0.5); + border-color: rgba(52, 152, 219, 0.5); +} +.tox .tox-insert-table-picker__label { + color: rgba(34, 47, 62, 0.6); + display: block; + font-size: 14px; + padding: 4px; + text-align: center; + width: 100%; +} +.tox { + /* stylelint-disable */ + /* stylelint-enable */ +} +.tox .tox-menu { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 4px 8px 0 rgba(34, 47, 62, 0.1); + display: inline-block; + overflow: hidden; + vertical-align: top; + z-index: 1; +} +.tox .tox-menu.tox-collection.tox-collection--list { + padding: 0; +} +.tox .tox-menu.tox-collection.tox-collection--toolbar { + padding: 4px; +} +.tox .tox-menu.tox-collection.tox-collection--grid { + padding: 4px; +} +.tox .tox-menu__label h1, +.tox .tox-menu__label h2, +.tox .tox-menu__label h3, +.tox .tox-menu__label h4, +.tox .tox-menu__label h5, +.tox .tox-menu__label h6, +.tox .tox-menu__label p, +.tox .tox-menu__label blockquote, +.tox .tox-menu__label code { + margin: 0; +} +.tox .tox-menubar { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='43px' viewBox='0 0 40 43px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='42px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + margin-bottom: -1px; + padding: 0 4px; +} +.tox .tox-mbtn { + align-items: center; + background: none; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + overflow: hidden; + padding: 0 4px; + text-transform: normal; + width: auto; +} +.tox .tox-mbtn[disabled] { + background-color: none; + border-color: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-mbtn:hover:not(:disabled) { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn:focus:not(:disabled) { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn--active { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-mbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-mbtn[disabled] .tox-mbtn__select-label { + cursor: not-allowed; +} +.tox .tox-mbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; + display: none; +} +.tox .tox-notification { + background-color: #fff; + border-color: #c5c5c5; + border-style: solid; + border-width: 1px; + box-sizing: border-box; + display: -ms-grid; + display: grid; + -ms-grid-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + grid-template-columns: minmax(40px, 1fr) auto minmax(40px, 1fr); + margin-top: 5px; + opacity: 0; + padding: 5px; + transition: transform 100ms ease-in, opacity 150ms ease-in; +} +.tox .tox-notification--in { + opacity: 1; +} +.tox .tox-notification--success { + background-color: #dff0d8; + border-color: #d6e9c6; +} +.tox .tox-notification--error { + background-color: #f2dede; + border-color: #ebccd1; +} +.tox .tox-notification--warn { + background-color: #fcf8e3; + border-color: #faebcc; +} +.tox .tox-notification--info { + background-color: #d9edf7; + border-color: #779ecb; +} +.tox .tox-notification__body { + -ms-grid-row-align: center; + align-self: center; + color: #31708f; + font-size: 14px; + grid-column-end: 3; + -ms-grid-column-span: 1; + -ms-grid-column: 2; + grid-column-start: 2; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + text-align: center; + white-space: normal; + word-break: break-all; + word-break: break-word; +} +.tox .tox-notification__body > * { + margin: 0; +} +.tox .tox-notification__body > * + * { + margin-top: 1rem; +} +.tox .tox-notification__icon { + -ms-grid-row-align: center; + align-self: center; + -ms-grid-column-align: end; + grid-column-end: 2; + -ms-grid-column-span: 1; + -ms-grid-column: 1; + grid-column-start: 1; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification__icon svg { + display: block; +} +.tox .tox-notification__dismiss { + -ms-grid-row-align: start; + align-self: start; + -ms-grid-column-align: end; + grid-column-end: 4; + -ms-grid-column-span: 1; + -ms-grid-column: 3; + grid-column-start: 3; + grid-row-end: 2; + -ms-grid-row: 1; + grid-row-start: 1; + justify-self: end; +} +.tox .tox-notification .tox-progress-bar { + -ms-grid-column-align: center; + grid-column-end: 4; + -ms-grid-column-span: 3; + -ms-grid-column: 1; + grid-column-start: 1; + grid-row-end: 3; + -ms-grid-row-span: 1; + -ms-grid-row: 2; + grid-row-start: 2; + justify-self: center; +} +.tox .tox-pop { + display: inline-block; + position: relative; +} +.tox .tox-pop--resizing { + transition: width .1s ease; +} +.tox .tox-pop--resizing .tox-toolbar { + flex-wrap: nowrap; +} +.tox .tox-pop__dialog { + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 3px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.15); + min-width: 0; + overflow: hidden; +} +.tox .tox-pop__dialog > *:not(.tox-toolbar) { + margin: 4px 4px 4px 8px; +} +.tox .tox-pop__dialog .tox-toolbar { + background-color: transparent; +} +.tox .tox-pop::before, +.tox .tox-pop::after { + border-style: solid; + content: ''; + display: block; + height: 0; + position: absolute; + width: 0; +} +.tox .tox-pop.tox-pop--bottom::before, +.tox .tox-pop.tox-pop--bottom::after { + left: 50%; + top: 100%; +} +.tox .tox-pop.tox-pop--bottom::after { + border-color: #fff transparent transparent transparent; + border-width: 8px; + margin-left: -8px; + margin-top: -1px; +} +.tox .tox-pop.tox-pop--bottom::before { + border-color: #cccccc transparent transparent transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--top::before, +.tox .tox-pop.tox-pop--top::after { + left: 50%; + top: 0; + transform: translateY(-100%); +} +.tox .tox-pop.tox-pop--top::after { + border-color: transparent transparent #fff transparent; + border-width: 8px; + margin-left: -8px; + margin-top: 1px; +} +.tox .tox-pop.tox-pop--top::before { + border-color: transparent transparent #cccccc transparent; + border-width: 9px; + margin-left: -9px; +} +.tox .tox-pop.tox-pop--left::before, +.tox .tox-pop.tox-pop--left::after { + left: 0; + top: calc(50% - 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--left::after { + border-color: transparent #fff transparent transparent; + border-width: 8px; + margin-left: -15px; +} +.tox .tox-pop.tox-pop--left::before { + border-color: transparent #cccccc transparent transparent; + border-width: 10px; + margin-left: -19px; +} +.tox .tox-pop.tox-pop--right::before, +.tox .tox-pop.tox-pop--right::after { + left: 100%; + top: calc(50% + 1px); + transform: translateY(-50%); +} +.tox .tox-pop.tox-pop--right::after { + border-color: transparent transparent transparent #fff; + border-width: 8px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--right::before { + border-color: transparent transparent transparent #cccccc; + border-width: 10px; + margin-left: -1px; +} +.tox .tox-pop.tox-pop--align-left::before, +.tox .tox-pop.tox-pop--align-left::after { + left: 20px; +} +.tox .tox-pop.tox-pop--align-right::before, +.tox .tox-pop.tox-pop--align-right::after { + left: calc(100% - 20px); +} +.tox .tox-sidebar-wrap { + display: flex; + flex-direction: row; + flex-grow: 1; + min-height: 0; +} +.tox .tox-sidebar { + display: flex; + flex-direction: row; + justify-content: flex-end; +} +.tox .tox-sidebar__slider { + display: flex; + overflow: hidden; +} +.tox .tox-sidebar__pane-container { + display: flex; +} +.tox .tox-sidebar__pane { + display: flex; +} +.tox .tox-sidebar--sliding-closed { + opacity: 0; +} +.tox .tox-sidebar--sliding-open { + opacity: 1; +} +.tox .tox-sidebar--sliding-growing, +.tox .tox-sidebar--sliding-shrinking { + transition: width .5s ease, opacity .5s ease; +} +.tox .tox-slider { + align-items: center; + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; + height: 24px; + justify-content: center; + position: relative; +} +.tox .tox-slider__rail { + background-color: transparent; + border: 1px solid #cccccc; + border-radius: 6px; + height: 6px; + min-width: 120px; + width: 100%; +} +.tox .tox-slider__handle { + background-color: #3498db; + border-radius: 1.5px; + box-shadow: none; + height: 24px; + left: 50%; + position: absolute; + top: 50%; + transform: translateX(-50%) translateY(-50%); + width: 3px; +} +.tox .tox-source-code { + overflow: auto; +} +.tox .tox-spinner { + display: flex; +} +.tox .tox-spinner > div { + animation: tam-bouncing-dots 1.5s ease-in-out 0s infinite both; + background-color: rgba(34, 47, 62, 0.6); + border-radius: 100%; + height: 8px; + width: 8px; +} +.tox .tox-spinner > div:nth-child(1) { + animation-delay: -0.32s; +} +.tox .tox-spinner > div:nth-child(2) { + animation-delay: -0.16s; +} +.tox .tox-spinner > div:not(:first-child) { + margin-left: 4px; +} +@keyframes tam-bouncing-dots { + 0%, + 80%, + 100% { + transform: scale(0); + } + 40% { + transform: scale(1); + } +} +.tox .tox-statusbar { + align-items: center; + background-color: #fff; + border-top: 1px solid #cccccc; + color: rgba(34, 47, 62, 0.6); + display: flex; + flex: 0 0 auto; + font-size: 12px; + height: 18px; + overflow: hidden; + padding: 0 8px; + position: relative; + text-transform: uppercase; +} +.tox .tox-statusbar a { + color: rgba(34, 47, 62, 0.6); + text-decoration: none; +} +.tox .tox-statusbar a:hover { + text-decoration: underline; +} +.tox .tox-statusbar__text-container { + display: flex; + flex: 1 1 auto; + justify-content: flex-end; + overflow: hidden; +} +.tox .tox-statusbar__path { + display: flex; + flex: 1 1 auto; + margin-right: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tox .tox-statusbar__path > * { + display: inline; + margin-right: 4px; + white-space: nowrap; +} +.tox .tox-statusbar__wordcount, +.tox .tox-statusbar__branding { + flex: 0 0 auto; + margin-left: 1ch; +} +.tox .tox-statusbar__resize-handle { + align-items: flex-end; + align-self: stretch; + cursor: nwse-resize; + display: flex; + flex: 0 0 auto; + justify-content: flex-end; + margin-left: auto; + margin-right: -8px; + padding-left: 1ch; +} +.tox .tox-statusbar__resize-handle svg { + display: block; + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-tbtn { + align-items: center; + background: none; + border: 0; + border-radius: 3px; + box-shadow: none; + color: #222f3e; + display: flex; + flex: 0 0 auto; + font-size: 14px; + font-style: normal; + font-weight: normal; + height: 34px; + justify-content: center; + margin: 2px 0 3px 0; + outline: none; + overflow: hidden; + padding: 0; + text-transform: normal; + width: 34px; +} +.tox .tox-tbtn svg { + display: block; + fill: #222f3e; +} +.tox .tox-tbtn.tox-tbtn-more { + padding-left: 5px; + padding-right: 5px; + width: inherit; +} +.tox .tox-tbtn + .tox-tbtn { + margin-left: 0; +} +.tox .tox-tbtn--enabled { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn--enabled > * { + transform: none; +} +.tox .tox-tbtn--enabled svg { + fill: #222f3e; +} +.tox .tox-tbtn:hover { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:hover svg { + fill: #222f3e; +} +.tox .tox-tbtn:focus { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:focus svg { + fill: #222f3e; +} +.tox .tox-tbtn:active { + background: #c8cbcf; + box-shadow: none; + color: #222f3e; +} +.tox .tox-tbtn:active svg { + fill: #222f3e; +} +.tox .tox-tbtn--disabled, +.tox .tox-tbtn--disabled:hover, +.tox .tox-tbtn:disabled, +.tox .tox-tbtn:disabled:hover { + background: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); + cursor: not-allowed; +} +.tox .tox-tbtn--disabled svg, +.tox .tox-tbtn--disabled:hover svg, +.tox .tox-tbtn:disabled svg, +.tox .tox-tbtn:disabled:hover svg { + /* stylelint-disable-line no-descending-specificity */ + fill: rgba(34, 47, 62, 0.5); +} +.tox .tox-tbtn:active > * { + transform: none; +} +.tox .tox-tbtn--md { + height: 51px; + width: 51px; +} +.tox .tox-tbtn--lg { + flex-direction: column; + height: 68px; + width: 68px; +} +.tox .tox-tbtn--return { + -ms-grid-row-align: stretch; + align-self: stretch; + height: unset; + width: 16px; +} +.tox .tox-tbtn--labeled { + padding: 0 4px; + width: unset; +} +.tox .tox-tbtn__vlabel { + display: block; + font-size: 10px; + font-weight: normal; + letter-spacing: -0.025em; + margin-bottom: 4px; + white-space: nowrap; +} +.tox .tox-tbtn--select { + margin: 2px 0 3px 0; + padding: 0 4px; + width: auto; +} +.tox .tox-tbtn__select-label { + cursor: default; + font-weight: normal; + margin: 0 4px; +} +.tox .tox-tbtn__select-chevron { + align-items: center; + display: flex; + justify-content: center; + width: 16px; +} +.tox .tox-tbtn__select-chevron svg { + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-tbtn--bespoke .tox-tbtn__select-label { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + width: 7em; +} +.tox .tox-split-button { + border: 0; + border-radius: 3px; + box-sizing: border-box; + display: flex; + margin: 2px 0 3px 0; + overflow: hidden; +} +.tox .tox-split-button:hover { + box-shadow: 0 0 0 1px #dee0e2 inset; +} +.tox .tox-split-button:focus { + background: #dee0e2; + box-shadow: none; + color: #222f3e; +} +.tox .tox-split-button > * { + border-radius: 0; +} +.tox .tox-split-button__chevron { + width: 16px; +} +.tox .tox-split-button__chevron svg { + fill: rgba(34, 47, 62, 0.6); +} +.tox .tox-pop .tox-split-button__chevron svg { + transform: rotate(-90deg); +} +.tox .tox-split-button .tox-tbtn { + margin: 0; +} +.tox .tox-split-button.tox-tbtn--disabled:hover, +.tox .tox-split-button.tox-tbtn--disabled:focus, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:hover, +.tox .tox-split-button.tox-tbtn--disabled .tox-tbtn:focus { + background: none; + box-shadow: none; + color: rgba(34, 47, 62, 0.5); +} +.tox .tox-toolbar, +.tox .tox-toolbar__primary, +.tox .tox-toolbar__overflow { + background: url("data:image/svg+xml;charset=utf8,%3Csvg height='39px' viewBox='0 0 40 39px' width='40' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='0' y='38px' width='100' height='1' fill='%23cccccc'/%3E%3C/svg%3E") left 0 top 0 #fff; + background-color: #fff; + border-top: 1px solid #cccccc; + display: flex; + flex: 0 0 auto; + flex-shrink: 0; + flex-wrap: wrap; + margin-bottom: -1px; + padding: 0 0; +} +.tox .tox-toolbar__overflow.tox-toolbar__overflow--closed { + display: none; +} +.tox .tox-pop .tox-toolbar { + border-width: 0; +} +.tox .tox-toolbar--no-divider { + background-image: none; +} +.tox.tox-tinymce-aux .tox-toolbar__overflow { + border-left: 1px solid #cccccc; + border-radius: 6px; + border-right: 1px solid #cccccc; +} +.tox .tox-toolbar__group { + align-items: center; + display: flex; + flex-wrap: wrap; + margin: 0 0; + padding: 0 4px; +} +.tox .tox-toolbar__group:not(:last-of-type) { + border-right: 1px solid #cccccc; +} +.tox .tox-toolbar__group--pull-right { + margin-left: auto; +} +.tox .tox-tooltip { + display: inline-block; + padding: 8px; + position: relative; +} +.tox .tox-tooltip__body { + background-color: #222f3e; + border-radius: 3px; + box-shadow: 0 2px 4px rgba(34, 47, 62, 0.3); + color: rgba(255, 255, 255, 0.75); + font-size: 14px; + font-style: normal; + font-weight: normal; + padding: 4px 8px; + text-transform: normal; +} +.tox .tox-tooltip__arrow { + position: absolute; +} +.tox .tox-tooltip--down .tox-tooltip__arrow { + border-left: 8px solid transparent; + border-right: 8px solid transparent; + border-top: 8px solid #222f3e; + bottom: 0; + left: 50%; + position: absolute; + transform: translateX(-50%); +} +.tox .tox-tooltip--up .tox-tooltip__arrow { + border-bottom: 8px solid #222f3e; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + left: 50%; + position: absolute; + top: 0; + transform: translateX(-50%); +} +.tox .tox-tooltip--right .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-left: 8px solid #222f3e; + border-top: 8px solid transparent; + position: absolute; + right: 0; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-tooltip--left .tox-tooltip__arrow { + border-bottom: 8px solid transparent; + border-right: 8px solid #222f3e; + border-top: 8px solid transparent; + left: 0; + position: absolute; + top: 50%; + transform: translateY(-50%); +} +.tox .tox-well { + border: 1px solid #cccccc; + border-radius: 3px; + padding: 8px; + width: 100%; +} +.tox .tox-well > *:first-child { + margin-top: 0; +} +.tox .tox-well > *:last-child { + margin-bottom: 0; +} +.tox .tox-well > *:only-child { + margin: 0; +} +.tox .tox-custom-editor { + border: 1px solid #cccccc; + border-radius: 3px; + display: flex; + height: 525px; +} +/* stylelint-disable */ +.tox { + /* stylelint-enable */ +} +.tox .tox-dialog-loading::before { + background-color: rgba(0, 0, 0, 0.5); + content: ""; + height: 100%; + position: absolute; + width: 100%; + z-index: 1000; +} +.tox .tox-tab { + cursor: pointer; +} +.tox .tox-dialog__content-js { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox .tox-dialog__body-content .tox-collection { + display: flex; + flex: 1; + -ms-flex-preferred-size: auto; +} +.tox ul { + display: block; + list-style-type: disc; + -webkit-margin-before: 1em; + margin-block-start: 1em; + -webkit-margin-after: 1em; + margin-block-end: 1em; + -webkit-margin-start: 0px; + margin-inline-start: 0px; + -webkit-margin-end: 0px; + margin-inline-end: 0px; + -webkit-padding-start: 40px; + padding-inline-start: 40px; +} +.tox a { + cursor: pointer; + color: #2276d2; +} +.tox .tox-image-tools-edit-panel { + height: 60px; +} +.tox .tox-image-tools__sidebar { + height: 60px; +} diff --git a/ant-design-jeecg-vue/src/api/api.js b/ant-design-jeecg-vue/src/api/api.js index 19a4b00da86605166887c6080bad99f799d6c93f..5306ff032e11968e4f10b05a9be1665e65aff3c4 100644 --- a/ant-design-jeecg-vue/src/api/api.js +++ b/ant-design-jeecg-vue/src/api/api.js @@ -1,17 +1,17 @@ import { getAction,deleteAction,putAction,postAction} from '@/api/manage' -//根路径 -const doMian = "/jeecg-boot/"; -//图片预览请求地址 -const imgView = "http://127.0.0.1:8080/jeecg-boot/sys/common/view/"; +////根路径 +// const doMian = "/jeecg-boot/"; +////图片预览请求地址 +// const imgView = "http://localhost:8080/jeecg-boot/sys/common/view/"; //角色管理 const addRole = (params)=>postAction("/sys/role/add",params); const editRole = (params)=>putAction("/sys/role/edit",params); -const getRoleList = (params)=>getAction("/sys/role/list",params); -const deleteRole = (params)=>deleteAction("/sys/role/delete",params); -const deleteRoleList = (params)=>deleteAction("/sys/role/deleteBatch",params); +// const getRoleList = (params)=>getAction("/sys/role/list",params); +// const deleteRole = (params)=>deleteAction("/sys/role/delete",params); +// const deleteRoleList = (params)=>deleteAction("/sys/role/deleteBatch",params); const checkRoleCode = (params)=>getAction("/sys/role/checkRoleCode",params); const queryall = (params)=>getAction("/sys/role/queryall",params); @@ -20,8 +20,8 @@ const addUser = (params)=>postAction("/sys/user/add",params); const editUser = (params)=>putAction("/sys/user/edit",params); const queryUserRole = (params)=>getAction("/sys/user/queryUserRole",params); const getUserList = (params)=>getAction("/sys/user/list",params); -const deleteUser = (params)=>deleteAction("/sys/user/delete",params); -const deleteUserList = (params)=>deleteAction("/sys/user/deleteBatch",params); +// const deleteUser = (params)=>deleteAction("/sys/user/delete",params); +// const deleteUserList = (params)=>deleteAction("/sys/user/deleteBatch",params); const frozenBatch = (params)=>putAction("/sys/user/frozenBatch",params); //验证用户账号是否唯一 const checkUsername = (params)=>getAction("/sys/user/checkOnlyUser",params); @@ -32,37 +32,41 @@ const changPassword = (params)=>putAction("/sys/user/changPassword",params); const addPermission= (params)=>postAction("/sys/permission/add",params); const editPermission= (params)=>putAction("/sys/permission/edit",params); const getPermissionList = (params)=>getAction("/sys/permission/list",params); -const deletePermission = (params)=>deleteAction("/sys/permission/delete",params); -const deletePermissionList = (params)=>deleteAction("/sys/permission/deleteBatch",params); +// const deletePermission = (params)=>deleteAction("/sys/permission/delete",params); +// const deletePermissionList = (params)=>deleteAction("/sys/permission/deleteBatch",params); const queryTreeList = (params)=>getAction("/sys/permission/queryTreeList",params); +const queryTreeListForRole = (params)=>getAction("/sys/role/queryTreeList",params); const queryListAsync = (params)=>getAction("/sys/permission/queryListAsync",params); const queryRolePermission = (params)=>getAction("/sys/permission/queryRolePermission",params); const saveRolePermission = (params)=>postAction("/sys/permission/saveRolePermission",params); const queryPermissionsByUser = (params)=>getAction("/sys/permission/queryByUser",params); const loadAllRoleIds = (params)=>getAction("/sys/permission/loadAllRoleIds",params); +const getPermissionRuleList = (params)=>getAction("/sys/permission/getPermRuleListByPermId",params); +const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermissionRule",params); // 部门管理 const queryDepartTreeList = (params)=>getAction("/sysdepart/sysDepart/queryTreeList",params); const queryIdTree = (params)=>getAction("/sysdepart/sysDepart/queryIdTree",params); const queryParentName = (params)=>getAction("/sysdepart/sysDepart/queryParentName",params); const searchByKeywords = (params)=>getAction("/sysdepart/sysDepart/searchBy",params); +const deleteByDepartId = (params)=>deleteAction("/sysdepart/sysDepart/delete",params); //日志管理 -const getLogList = (params)=>getAction("/sys/log/list",params); +//const getLogList = (params)=>getAction("/sys/log/list",params); const deleteLog = (params)=>deleteAction("/sys/log/delete",params); const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params); //数据字典 const addDict = (params)=>postAction("/sys/dict/add",params); const editDict = (params)=>putAction("/sys/dict/edit",params); -const getDictList = (params)=>getAction("/sys/dict/list",params); +//const getDictList = (params)=>getAction("/sys/dict/list",params); const treeList = (params)=>getAction("/sys/dict/treeList",params); -const delDict = (params)=>deleteAction("/sys/dict/delete",params); -const getDictItemList = (params)=>getAction("/sys/dictItem/list",params); +// const delDict = (params)=>deleteAction("/sys/dict/delete",params); +//const getDictItemList = (params)=>getAction("/sys/dictItem/list",params); const addDictItem = (params)=>postAction("/sys/dictItem/add",params); const editDictItem = (params)=>putAction("/sys/dictItem/edit",params); -const delDictItem = (params)=>deleteAction("/sys/dictItem/delete",params); -const delDictItemList = (params)=>deleteAction("/sys/dictItem/deleteBatch",params); +//const delDictItem = (params)=>deleteAction("/sys/dictItem/delete",params); +//const delDictItemList = (params)=>deleteAction("/sys/dictItem/deleteBatch",params); //字典标签专用(通过code获取字典数组) export const ajaxGetDictItems = (code, params)=>getAction(`/sys/dict/getDictItems/${code}`,params); @@ -72,29 +76,32 @@ const doReleaseData = (params)=>getAction("/sys/annountCement/doReleaseData",par const doReovkeData = (params)=>getAction("/sys/annountCement/doReovkeData",params); //获取系统访问量 const getLoginfo = (params)=>getAction("/sys/loginfo",params); +//数据日志访问 +// const getDataLogList = (params)=>getAction("/sys/dataLog/list",params); + +// 根据部门主键查询用户信息 +const queryUserByDepId = (params)=>getAction("/sys/user/queryUserByDepId",params); + +// 查询用户角色表里的所有信息 +const queryUserRoleMap = (params)=>getAction("/sys/user/queryUserRoleMap",params); +// 重复校验 +const duplicateCheck = (params)=>getAction("/sys/duplicate/check",params); export { - imgView, - doMian, + // imgView, + // doMian, addRole, editRole, - getRoleList, - deleteRole, - deleteRoleList, checkRoleCode, addUser, editUser, queryUserRole, - queryall, getUserList, - deleteUser, - deleteUserList, + queryall, frozenBatch, checkUsername, changPassword, getPermissionList, - deletePermission, - deletePermissionList, addPermission, editPermission, queryTreeList, @@ -103,26 +110,27 @@ export { saveRolePermission, queryPermissionsByUser, loadAllRoleIds, + getPermissionRuleList, + queryPermissionRule, queryDepartTreeList, queryIdTree, queryParentName, searchByKeywords, - getLogList, + deleteByDepartId, deleteLog, deleteLogList, - getDictList, addDict, editDict, - delDict, treeList, - getDictItemList, addDictItem, editDictItem, - delDictItem, - delDictItemList, doReleaseData, doReovkeData, - getLoginfo + getLoginfo, + queryUserByDepId, + queryUserRoleMap, + duplicateCheck, + queryTreeListForRole } diff --git a/ant-design-jeecg-vue/src/api/index.js b/ant-design-jeecg-vue/src/api/index.js index 53d498542fdd77575487dab017a25024fc0b8543..35367e20fb1422bb47833c0ff564ba72fa9cbe65 100644 --- a/ant-design-jeecg-vue/src/api/index.js +++ b/ant-design-jeecg-vue/src/api/index.js @@ -1,6 +1,6 @@ const api = { Login: '/sys/login', - Logout: '/auth/logout', + Logout: '/sys/logout', ForgePassword: '/auth/forge-password', Register: '/auth/register', SendSms: '/account/sms', diff --git a/ant-design-jeecg-vue/src/api/login.js b/ant-design-jeecg-vue/src/api/login.js index 9e72c428772206536f76ac4997d11a763583e6ca..f5b306b62539c2a7e52bc21486d280627e88b469 100644 --- a/ant-design-jeecg-vue/src/api/login.js +++ b/ant-design-jeecg-vue/src/api/login.js @@ -38,12 +38,13 @@ export function getInfo() { }) } -export function logout() { +export function logout(logoutToken) { return axios({ - url: '/api/auth/logout', + url: '/sys/logout', method: 'post', headers: { - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'application/json;charset=UTF-8', + 'X-Access-Token': logoutToken } }) } \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/api/manage.js b/ant-design-jeecg-vue/src/api/manage.js index cc505181bc128662f7e3246d1ecdcf12a4de6e19..f0e1438f802474a3cfaf5d683849a81e2fb10eb6 100644 --- a/ant-design-jeecg-vue/src/api/manage.js +++ b/ant-design-jeecg-vue/src/api/manage.js @@ -97,3 +97,18 @@ export function saveService(parameter) { }) } +/** + * 下载文件 用于excel导出 + * @param url + * @param parameter + * @returns {*} + */ +export function downFile(url,parameter){ + return axios({ + url: url, + params: parameter, + method:'get' , + responseType: 'blob' + }) +} + diff --git a/ant-design-jeecg-vue/src/assets/less/common.css b/ant-design-jeecg-vue/src/assets/less/common.css new file mode 100644 index 0000000000000000000000000000000000000000..717295ada977c7e5ed1974edda31173d3ddd7c23 --- /dev/null +++ b/ant-design-jeecg-vue/src/assets/less/common.css @@ -0,0 +1,29 @@ + +/*列表上方操作按钮*/ +.ant-card-body .table-operator { + margin-bottom: 18px; +} + +/*列表td的padding设置 可以控制列表大小*/ +.ant-table-tbody .ant-table-row td { + padding-top: 15px; + padding-bottom: 15px; +} + +/*列表页面弹出modal*/ +.ant-modal-cust-warp { + height: 100% +} + +/*弹出modal Y轴滚动条*/ +.ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto +} + +/*弹出modal 先有content后有body 故滚动条控制在body上*/ +.ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden +} + diff --git a/ant-design-jeecg-vue/src/assets/less/index.less b/ant-design-jeecg-vue/src/assets/less/index.less index ec5420d372db34f82302c87398a7b4bb96d67c2b..f086f5fe2219a0ee8f8ec20e2947c38b8b7f1e87 100644 --- a/ant-design-jeecg-vue/src/assets/less/index.less +++ b/ant-design-jeecg-vue/src/assets/less/index.less @@ -1,3 +1,6 @@ +/** + * 列表查询通用样式,移动端自适应 + */ .search{ margin-bottom: 54px; } @@ -19,3 +22,7 @@ i { cursor: pointer; } +.trcolor{ + background-color: rgba(255, 192, 203, 0.31); + color:red; +} diff --git a/ant-design-jeecg-vue/src/assets/logo.png b/ant-design-jeecg-vue/src/assets/logo.png index e887375c355c8045315ca9f39de93ec21d5e71d9..1a55a53c6c4fc39e48bd1fabf24f82c1c12d16de 100644 Binary files a/ant-design-jeecg-vue/src/assets/logo.png and b/ant-design-jeecg-vue/src/assets/logo.png differ diff --git a/ant-design-jeecg-vue/src/components/README.md b/ant-design-jeecg-vue/src/components/README.md new file mode 100644 index 0000000000000000000000000000000000000000..4adb1073978a67b057cf2dc79a21d4fd40ac75ba --- /dev/null +++ b/ant-design-jeecg-vue/src/components/README.md @@ -0,0 +1,41 @@ +####1._util包:存放自定义函数 详细见代码注释 +####2.AvatarList:显示头像群并支持tip,用法参考src\views\Home.vue(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12181253_O0Xi.png "在这里输入图片标题") +####3.chart包:存放各种图表相关的组件,条形图柱形图折线图等等 具体用法参考首页 +####4.countDown包:一个倒计时组件,用法参考home页,简单描述,该组件有3个属性, +target(时间/毫秒数)必填, +format(function,该方法接收一个毫秒数的参数,用于格式化显示当前倒计时时间)非必填, +onEnd倒计时结束触发函数 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12182046_mwqJ.png "在这里输入图片标题") +####5.dict包:数据字典专用,用法参考文件夹下readme文件 +####6.Ellipsis包:字符串截取组件,可以指定字符串的显示长度,并将全部内容显示到tip中,简单使用参考src\views\system\PermissionList.vue +####7.jeecg包:该包下自定义了很多列表/表单中用到的组件 参考包下readme文件 +####8.jeecgbiz包:该包下定义了一些业务相关的组件,比如选择用户弹框,根据部门选择用户等等 +####9.layouts+page包:系统页面布局相关组件,比如登陆进去之后页面顶部显示什么,底部显示什么,菜单点击触发多个tab的布局等等 一般情况不需要修改 +####10.menun包:菜单组件,俩个,一个折叠菜单一个正常显示的菜单 +####11.NumberInfo:数字信息显示组件 如下图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12185858_uvJ5.png "在这里输入图片标题") +####12.online包:该包下封装了online表单的相关组件,用于展示表单各种控件,验证表单等等,相关用法参考readme +####13.setting包:该包下封装了首页风格切换等功能如下图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12190520_jySG.png "在这里输入图片标题") +####14.table包:一个二次封装的table组件,用于展示列表,参考readme +####15.tools包: +Breadcrumb.vue:面包屑二次封装,支持路由跳转 +DetailList.vue:详情展示用法参考src\views\profile\advanced\Advanced.vue(效果如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12193954_Uar6.png "在这里输入图片标题") +```` +个人认为该页面代码有两点值得学习: +1.vue provide/inject的使用 +2.该页面css定义方式,只定义一个顶层class,其余样式都定义在其下,这样只要顶层class不和别的页面冲突,整个页面的样式都是唯一生效的 +```` +FooterToolBar.vue:fixed定位的底部,通过是否定义内部控件的属性slot="extra"决定是左浮动或是右浮动 +HeaderNotice.vue:首页通知(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12195340_fPe0.png "在这里输入图片标题") +HeaderInfo.vue:上下文字布局(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12195638_dG5o.png "在这里输入图片标题") +Logo.vue:首页左上侧的log图 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12200908_ihv3.png "在这里输入图片标题") +UserMenu.vue:首页右上侧的内容 +![输入图片说明](https://static.oschina.net/uploads/img/201904/12201226_laQK.png "在这里输入图片标题") +####16.trend包 趋势显示组件(如下图) +![输入图片说明](https://static.oschina.net/uploads/img/201904/12201600_Wo8K.png "在这里输入图片标题") diff --git a/ant-design-jeecg-vue/src/components/_util/StringUtil.js b/ant-design-jeecg-vue/src/components/_util/StringUtil.js index 29aed19bc74117eeb812bdf8b521af63e18881d1..3f525982a0aeedd708923a5ff8b1d940ca5f690f 100644 --- a/ant-design-jeecg-vue/src/components/_util/StringUtil.js +++ b/ant-design-jeecg-vue/src/components/_util/StringUtil.js @@ -1,4 +1,8 @@ - +/** + * 获取字符串的长度ascii长度为1 中文长度为2 + * @param str + * @returns {number} + */ export const getStrFullLength = (str = '') => str.split('').reduce((pre, cur) => { const charCode = cur.charCodeAt(0) @@ -8,6 +12,12 @@ export const getStrFullLength = (str = '') => return pre + 2 }, 0) +/** + * 给定一个字符串和一个长度,将此字符串按指定长度截取 + * @param str + * @param maxLength + * @returns {string} + */ export const cutStrByFullLength = (str = '', maxLength) => { let showLength = 0 return str.split('').reduce((pre, cur) => { diff --git a/ant-design-jeecg-vue/src/components/chart/AreaChartTy.vue b/ant-design-jeecg-vue/src/components/chart/AreaChartTy.vue new file mode 100644 index 0000000000000000000000000000000000000000..ea1b42f5517916f8c3c838fb9d015bdc039c84d1 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/AreaChartTy.vue @@ -0,0 +1,68 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Bar.vue b/ant-design-jeecg-vue/src/components/chart/Bar.vue index 0a103c634a2718a2ab3ab39add9e1f7d8aedb621..0b0f096218d2d265a064ce57ffa6bc0d5e749dbd 100644 --- a/ant-design-jeecg-vue/src/components/chart/Bar.vue +++ b/ant-design-jeecg-vue/src/components/chart/Bar.vue @@ -1,57 +1,38 @@ \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/BarMultid.vue b/ant-design-jeecg-vue/src/components/chart/BarMultid.vue new file mode 100644 index 0000000000000000000000000000000000000000..1edfac31060d8a8ee5fbc08b04c9acaf36afeeb3 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/BarMultid.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/DashChartDemo.vue b/ant-design-jeecg-vue/src/components/chart/DashChartDemo.vue new file mode 100644 index 0000000000000000000000000000000000000000..101c9f79d23b3ecd54e737fa0ddcd942433a8d89 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/DashChartDemo.vue @@ -0,0 +1,190 @@ + + + diff --git a/ant-design-jeecg-vue/src/components/chart/LineChartMultid.vue b/ant-design-jeecg-vue/src/components/chart/LineChartMultid.vue new file mode 100644 index 0000000000000000000000000000000000000000..66e61381f8a43aae79b897c88afd8ab76346edc0 --- /dev/null +++ b/ant-design-jeecg-vue/src/components/chart/LineChartMultid.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/components/chart/Liquid.vue b/ant-design-jeecg-vue/src/components/chart/Liquid.vue index fdf58ee5bb0e4214ff13274a5d9547a673170e44..85e5b61749bda9b5c099aca3105ab65a11ddd42f 100644 --- a/ant-design-jeecg-vue/src/components/chart/Liquid.vue +++ b/ant-design-jeecg-vue/src/components/chart/Liquid.vue @@ -1,19 +1,19 @@ diff --git a/ant-design-jeecg-vue/src/views/modules/message/SysMessageList.vue b/ant-design-jeecg-vue/src/views/modules/message/SysMessageList.vue new file mode 100644 index 0000000000000000000000000000000000000000..f181af2d445237ac131ed855ea1feadc45a9578e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/message/SysMessageList.vue @@ -0,0 +1,261 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/message/SysMessageTemplateList.vue b/ant-design-jeecg-vue/src/views/modules/message/SysMessageTemplateList.vue new file mode 100644 index 0000000000000000000000000000000000000000..7fd261246f829792a8f7055151b99aa043bab08a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/message/SysMessageTemplateList.vue @@ -0,0 +1,250 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageModal.vue b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..f2fb69051a40a4d22b27ba68c771563a90907a9f --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageModal.vue @@ -0,0 +1,184 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTemplateModal.vue b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTemplateModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..5f2fc2c3203684c4e8bfcb4375ea320167b06722 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTemplateModal.vue @@ -0,0 +1,156 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTestModal.vue b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTestModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..77cc36fd6af816b33e4dc710a5e2dc713742627a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/message/modules/SysMessageTestModal.vue @@ -0,0 +1,122 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/online/cgreport/OnlCgreportHeadList.vue b/ant-design-jeecg-vue/src/views/modules/online/cgreport/OnlCgreportHeadList.vue new file mode 100644 index 0000000000000000000000000000000000000000..30cca5132afa8cad8e86e4d4eb5cd3587a996b1c --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/online/cgreport/OnlCgreportHeadList.vue @@ -0,0 +1,218 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue b/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue new file mode 100644 index 0000000000000000000000000000000000000000..95ddc2c71cb0bcc755b44581699d974df0bda601 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportAutoList.vue @@ -0,0 +1,208 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportQueryFormItem.vue b/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportQueryFormItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..c76fd93b3bc99b96d1fd30213d5d10d29c16be94 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/online/cgreport/auto/OnlCgreportQueryFormItem.vue @@ -0,0 +1,91 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/modules/online/cgreport/modules/OnlCgreportHeadModal.vue b/ant-design-jeecg-vue/src/views/modules/online/cgreport/modules/OnlCgreportHeadModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..508ec026d1e10ffffbdc6e0fe7ede2a836bfd49e --- /dev/null +++ b/ant-design-jeecg-vue/src/views/modules/online/cgreport/modules/OnlCgreportHeadModal.vue @@ -0,0 +1,562 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/monitor/HttpTrace.vue b/ant-design-jeecg-vue/src/views/monitor/HttpTrace.vue new file mode 100644 index 0000000000000000000000000000000000000000..ad2051869d502309a42af3e7a513a1773aa74537 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/HttpTrace.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/ant-design-jeecg-vue/src/views/monitor/JvmInfo.vue b/ant-design-jeecg-vue/src/views/monitor/JvmInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..4fa98cbfeed26feeb3579d5b69222e267e1db7ba --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/JvmInfo.vue @@ -0,0 +1,256 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/monitor/RedisInfo.vue b/ant-design-jeecg-vue/src/views/monitor/RedisInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..05a7e8a32b6dc6097bad0765f7a898e74a92395a --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/RedisInfo.vue @@ -0,0 +1,216 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/monitor/RedisTerminal.vue b/ant-design-jeecg-vue/src/views/monitor/RedisTerminal.vue new file mode 100644 index 0000000000000000000000000000000000000000..e671afa155d0fe5295208195e5e27526309fca71 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/RedisTerminal.vue @@ -0,0 +1,13 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/monitor/SystemInfo.vue b/ant-design-jeecg-vue/src/views/monitor/SystemInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..c3d86404a4fd9280e6a7c52a08c547430b8752f7 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/SystemInfo.vue @@ -0,0 +1,125 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/monitor/TomcatInfo.vue b/ant-design-jeecg-vue/src/views/monitor/TomcatInfo.vue new file mode 100644 index 0000000000000000000000000000000000000000..84f539e0d682075f716473491fc11d3ed91483c1 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/monitor/TomcatInfo.vue @@ -0,0 +1,202 @@ + + + diff --git a/ant-design-jeecg-vue/src/views/system/DataLogList.vue b/ant-design-jeecg-vue/src/views/system/DataLogList.vue new file mode 100644 index 0000000000000000000000000000000000000000..db518f933b92f2ea73411a43a410356857b959a6 --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/DataLogList.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/DepartList.vue b/ant-design-jeecg-vue/src/views/system/DepartList.vue index 58a2b12c68a84c37dbf6b97c994274126cef965e..d69fbb3cbd22e2bec15b87873eeab9f19725189b 100644 --- a/ant-design-jeecg-vue/src/views/system/DepartList.vue +++ b/ant-design-jeecg-vue/src/views/system/DepartList.vue @@ -1,110 +1,121 @@ - @@ -247,9 +197,6 @@ .ant-card-body .table-operator{ margin-bottom: 18px; } - .ant-layout-content{ - margin:12px 16px 0 !important; - } .ant-table-tbody .ant-table-row td{ padding-top:15px; padding-bottom:15px; diff --git a/ant-design-jeecg-vue/src/views/system/PermissionDataRuleList.vue b/ant-design-jeecg-vue/src/views/system/PermissionDataRuleList.vue new file mode 100644 index 0000000000000000000000000000000000000000..dd715d77c41ebc91bf124d2b3e8de713017e945f --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/PermissionDataRuleList.vue @@ -0,0 +1,176 @@ + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/PermissionList.vue b/ant-design-jeecg-vue/src/views/system/PermissionList.vue index c93fd709850a3034de381ea1640a3ea2aad5cf03..1c0eb073740e20f8d56477e34eb6f8e4fe678e69 100644 --- a/ant-design-jeecg-vue/src/views/system/PermissionList.vue +++ b/ant-design-jeecg-vue/src/views/system/PermissionList.vue @@ -5,37 +5,39 @@
新增 批量删除 + icon="delete">批量删除 +
- - 已选择 {{ selectedRowKeys.length }}项   + 已选择 {{ + selectedRowKeys.length }}项   清空
+ :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"> 编辑 - + - 更多 + 更多 @@ -43,59 +45,61 @@ - - 删除 - + 数据规则 - - - + + + + + + + +
- + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue b/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue index 5aa6526fbaa3176382cb627c30a82fdad1d24158..fcc5c3c89a741035d30266eacd6b67347225b32b 100644 --- a/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue +++ b/ant-design-jeecg-vue/src/views/system/QuartzJobList.vue @@ -6,14 +6,14 @@ - + - + - + 全部 正常 停止 @@ -21,7 +21,7 @@ - + 查询 重置 @@ -35,7 +35,11 @@
新增 - + 导出 + + 导入 + 删除 @@ -63,6 +67,12 @@ :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" @change="handleTableChange"> + + + + + + 启动 停止 @@ -91,19 +101,22 @@ - + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue b/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue index 3eb99cf68ef1c6f11a716e9c9c7cc43f80a96df3..681f6bf9805a167e82dd9eb54833e5f198951feb 100644 --- a/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue +++ b/ant-design-jeecg-vue/src/views/system/SysAnnouncementList.vue @@ -17,7 +17,7 @@ - + 查询 重置 @@ -31,12 +31,20 @@
新增 - + 导出 + + 导入 + - 删除 + + + 删除 + - 批量操作 + 批量操作 + +
@@ -62,9 +70,9 @@ 编辑 - + - 更多 + 更多 @@ -90,22 +98,22 @@ - + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/UserList.vue b/ant-design-jeecg-vue/src/views/system/UserList.vue index 9a0454ab66a810c7c312faa1cce5b5eee896ca59..d26aef8ba3aaa13140132312b5a76e2371cda756 100644 --- a/ant-design-jeecg-vue/src/views/system/UserList.vue +++ b/ant-design-jeecg-vue/src/views/system/UserList.vue @@ -6,13 +6,13 @@ - + - + 请选择性别查询 @@ -24,19 +24,19 @@ - + - 查询 + 查询 重置 {{ toggleSearchStatus ? '收起' : '展开' }} @@ -63,25 +63,31 @@
-
- 添加用户 - - - +
+ 添加用户 + 重新同步流程用户 + 导出 + + 导入 + - 删除 - 冻结 - 解冻 + + + 删除 + + + + 冻结 + + + + 解冻 + - 批量操作 + 批量操作 +
@@ -89,8 +95,7 @@
@@ -110,32 +115,24 @@
- - - 编辑 - + + - 更多 + 更多 - + 详情 - - 修改密码 + + 密码 @@ -165,7 +162,7 @@
- + @@ -173,19 +170,20 @@ \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DataLogCompareModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DataLogCompareModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..e02bb02c74297931ee1a655564aa741b85c7e7ff --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/DataLogCompareModal.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DataLogModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DataLogModal.vue new file mode 100644 index 0000000000000000000000000000000000000000..c9f1e9c0bac45dba86b4fd703debd2ae3ad2c46d --- /dev/null +++ b/ant-design-jeecg-vue/src/views/system/modules/DataLogModal.vue @@ -0,0 +1,153 @@ + + + + + \ No newline at end of file diff --git a/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue index e55e87bb556a300fe306e32a6630fdebf7ac4086..c4b76d0d3f88c6cbc723b6099244254a5efba319 100644 --- a/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue +++ b/ant-design-jeecg-vue/src/views/system/modules/DepartModal.vue @@ -120,7 +120,6 @@ for (let i = 0; i < res.result.length; i++) { let temp = res.result[i]; that.departTree.push(temp); - console.log(temp.id) } } diff --git a/ant-design-jeecg-vue/src/views/system/modules/DepartWindow.vue b/ant-design-jeecg-vue/src/views/system/modules/DepartWindow.vue index da933838872363432c85faba906a25e06165c1b5..a4de2f837963d77d4e316498676e88396e23a217 100644 --- a/ant-design-jeecg-vue/src/views/system/modules/DepartWindow.vue +++ b/ant-design-jeecg-vue/src/views/system/modules/DepartWindow.vue @@ -101,13 +101,10 @@ if(this.userId == null){ getAction(this.url.userId).then((res)=>{ if(res.success){ - that.$message.success(res.message); let formData = {userId:res.result, - departIdList:this.departList} + departIdList:this.departList} console.log(formData) that.$emit('ok', formData); - }else{ - that.$message.warning("添加失败!"); } }).finally(() => { that.departList = []; diff --git a/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue b/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue index cda81a366b64001721ec9a1da747ade21a1edb14..6d40f64d8d48eda5390f806d67a9ac56e6750799 100644 --- a/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue +++ b/ant-design-jeecg-vue/src/views/system/modules/DictItemModal.vue @@ -1,7 +1,7 @@ \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai index 68899454e8f7adbd7bd7d023a42a779025c62fe2..893c4c5a860d49308082705efdc50261b1552767 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -1,83 +1,81 @@ -package org.jeecg.modules.demo.test.controller; +package ${bussiPackage}.${entityPackage}.controller; +import java.io.UnsupportedEncodingException; +import java.io.IOException; +import java.net.URLDecoder; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; -import org.jeecg.modules.demo.test.entity.JeecgOrderCustomer; -import org.jeecg.modules.demo.test.entity.JeecgOrderMain; -import org.jeecg.modules.demo.test.entity.JeecgOrderTicket; -import org.jeecg.modules.demo.test.service.IJeecgOrderCustomerService; -import org.jeecg.modules.demo.test.service.IJeecgOrderMainService; -import org.jeecg.modules.demo.test.service.IJeecgOrderTicketService; -import org.jeecg.modules.demo.test.vo.JeecgOrderMainPage; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import ${bussiPackage}.${entityPackage}.vo.${entityName}Page; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.service.I${sub.entityName}Service; + +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSON; /** * @Title: Controller - * @Description: 订单 + * @Description: ${tableVo.ftlDescription} * @author: jeecg-boot - * @date: 2019-02-15 + * @date: ${.now?string["yyyy-MM-dd"]} * @version: V1.0 */ @RestController -@RequestMapping("/test/jeecgOrderMain") +@RequestMapping("/${entityPackage}/${entityName?uncap_first}") @Slf4j -public class JeecgOrderMainController { +public class ${entityName}Controller { @Autowired - private IJeecgOrderMainService jeecgOrderMainService; - <#if isMainTable == "true"> + private I${entityName}Service ${entityName?uncap_first}Service; + <#list subTables as sub> @Autowired - private IJeecgOrderCustomerService jeecgOrderCustomerService; - @Autowired - private IJeecgOrderTicketService jeecgOrderTicketService; - + private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; + /** * 分页列表查询 - * @param jeecgOrderMain + * @param ${entityName?uncap_first} * @param pageNo * @param pageSize * @param req * @return */ @GetMapping(value = "/list") - public Result> queryPageList(JeecgOrderMain jeecgOrderMain, + public Result> queryPageList(${entityName} ${entityName?uncap_first}, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { - Result> result = new Result>(); - QueryWrapper queryWrapper = new QueryWrapper(jeecgOrderMain); - Page page = new Page(pageNo,pageSize); - //排序逻辑 处理 - String column = req.getParameter("column"); - String order = req.getParameter("order"); - if(oConvertUtils.isNotEmpty(column) && oConvertUtils.isNotEmpty(order)) { - if("asc".equals(order)) { - queryWrapper.orderByAsc(oConvertUtils.camelToUnderline(column)); - }else { - queryWrapper.orderByDesc(oConvertUtils.camelToUnderline(column)); - } - } - IPage pageList = jeecgOrderMainService.page(page, queryWrapper); - //log.debug("查询当前页:"+pageList.getCurrent()); - //log.debug("查询当前页数量:"+pageList.getSize()); - //log.debug("查询结果数量:"+pageList.getRecords().size()); - //log.debug("数据总数:"+pageList.getTotal()); + Result> result = new Result>(); + QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); + Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize); + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); result.setSuccess(true); result.setResult(pageList); return result; @@ -85,14 +83,17 @@ public class JeecgOrderMainController { /** * 添加 - * @param jeecgOrderMain + * @param ${entityName?uncap_first}Page * @return */ @PostMapping(value = "/add") - public Result add(@RequestBody JeecgOrderMainPage jeecgOrderMainPage) { - Result result = new Result(); + public Result<${entityName}> add(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) { + Result<${entityName}> result = new Result<${entityName}>(); try { - jeecgOrderMainService.saveMain(jeecgOrderMainPage.getJeecgOrderMain(), jeecgOrderMainPage.getJeecgOrderCustomerList(), jeecgOrderMainPage.getJeecgOrderTicketList());; + ${entityName} ${entityName?uncap_first} = new ${entityName}(); + BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first}); + + ${entityName?uncap_first}Service.saveMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); result.success("添加成功!"); } catch (Exception e) { e.printStackTrace(); @@ -104,18 +105,20 @@ public class JeecgOrderMainController { /** * 编辑 - * @param jeecgOrderMain + * @param ${entityName?uncap_first}Page * @return */ @PutMapping(value = "/edit") - public Result eidt(@RequestBody JeecgOrderMainPage jeecgOrderMainPage) { - Result result = new Result(); - JeecgOrderMain jeecgOrderMain = jeecgOrderMainPage.getJeecgOrderMain(); - JeecgOrderMain jeecgOrderMainEntity = jeecgOrderMainService.getById(jeecgOrderMain.getId()); - if(jeecgOrderMainEntity==null) { + public Result<${entityName}> edit(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = new ${entityName}(); + BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first}); + ${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId()); + if(${entityName?uncap_first}Entity==null) { result.error500("未找到对应实体"); }else { - jeecgOrderMainService.updateMain(jeecgOrderMain, jeecgOrderMainPage.getJeecgOrderCustomerList(), jeecgOrderMainPage.getJeecgOrderTicketList()); + boolean ok = ${entityName?uncap_first}Service.updateById(${entityName?uncap_first}); + ${entityName?uncap_first}Service.updateMain(${entityName?uncap_first}, <#list subTables as sub>${entityName?uncap_first}Page.get${sub.entityName}List()<#if sub_has_next>,); result.success("修改成功!"); } @@ -128,13 +131,13 @@ public class JeecgOrderMainController { * @return */ @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - JeecgOrderMain jeecgOrderMain = jeecgOrderMainService.getById(id); - if(jeecgOrderMain==null) { + public Result<${entityName}> delete(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { result.error500("未找到对应实体"); }else { - jeecgOrderMainService.delMain(id); + ${entityName?uncap_first}Service.delMain(id); result.success("删除成功!"); } @@ -147,12 +150,12 @@ public class JeecgOrderMainController { * @return */ @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - Result result = new Result(); + public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result<${entityName}> result = new Result<${entityName}>(); if(ids==null || "".equals(ids.trim())) { result.error500("参数不识别!"); }else { - this.jeecgOrderMainService.removeByIds(Arrays.asList(ids.split(","))); + this.${entityName?uncap_first}Service.delBatchMain(Arrays.asList(ids.split(","))); result.success("删除成功!"); } return result; @@ -164,44 +167,113 @@ public class JeecgOrderMainController { * @return */ @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Result result = new Result(); - JeecgOrderMain jeecgOrderMain = jeecgOrderMainService.getById(id); - if(jeecgOrderMain==null) { + public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { result.error500("未找到对应实体"); }else { - result.setResult(jeecgOrderMain); + result.setResult(${entityName?uncap_first}); result.setSuccess(true); } return result; } + <#list subTables as sub> /** * 通过id查询 * @param id * @return */ - @GetMapping(value = "/queryOrderCustomerListByMainId") - public Result> queryOrderCustomerListByMainId(@RequestParam(name="id",required=true) String id) { - Result> result = new Result>(); - List jeecgOrderCustomerList = jeecgOrderCustomerService.selectCustomersByMainId(id); - result.setResult(jeecgOrderCustomerList); - result.setSuccess(true); - return result; - } - - /** - * 通过id查询 - * @param id - * @return - */ - @GetMapping(value = "/queryOrderTicketListByMainId") - public Result> queryOrderTicketListByMainId(@RequestParam(name="id",required=true) String id) { - Result> result = new Result>(); - List jeecgOrderTicketList = jeecgOrderTicketService.selectTicketsByMainId(id); - result.setResult(jeecgOrderTicketList); + @GetMapping(value = "/query${sub.entityName}ByMainId") + public Result> query${sub.entityName}ListByMainId(@RequestParam(name="id",required=true) String id) { + Result> result = new Result>(); + List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(id); + result.setResult(${sub.entityName?uncap_first}List); result.setSuccess(true); return result; } + + + /** + * 导出excel + * + * @param request + * @param response + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { + // Step.1 组装查询条件 + QueryWrapper<${entityName}> queryWrapper = null; + try { + String paramsStr = request.getParameter("paramsStr"); + if (oConvertUtils.isNotEmpty(paramsStr)) { + String deString = URLDecoder.decode(paramsStr, "UTF-8"); + ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class); + queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap()); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List<${entityName}Page> pageList = new ArrayList<${entityName}Page>(); + List<${entityName}> ${entityName?uncap_first}List = ${entityName?uncap_first}Service.list(queryWrapper); + for (${entityName} ${entityName?uncap_first} : ${entityName?uncap_first}List) { + ${entityName}Page vo = new ${entityName}Page(); + BeanUtils.copyProperties(${entityName?uncap_first}, vo); + <#list subTables as sub> + List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(${entityName?uncap_first}.getId()); + vo.set${sub.entityName}List(${sub.entityName?uncap_first}List); + + pageList.add(vo); + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表"); + mv.addObject(NormalExcelConstants.CLASS, ${entityName}Page.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List<${entityName}Page> list = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}Page.class, params); + for (${entityName}Page page : list) { + ${entityName} po = new ${entityName}(); + BeanUtils.copyProperties(page, po); + ${entityName?uncap_first}Service.saveMain(po, <#list subTables as sub>page.get${sub.entityName}List()<#if sub_has_next>,); + } + return Result.ok("文件导入成功!数据行数:" + list.size()); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.ok("文件导入失败!"); + } } diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai index a6174922d531d99eb920f8911aaae6307eed3e74..5cbe5e18bc5b33ca11506b4b816bba9799b4a821 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -22,7 +22,7 @@ public class ${entityName} implements Serializable { <#list originalColumns as po> /**${po.filedComment}*/ - <#if po.fieldName == tableId> + <#if po.fieldName == primaryKeyField> @TableId(type = IdType.UUID) <#if po.fieldType =='java.util.Date'> diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai new file mode 100644 index 0000000000000000000000000000000000000000..fa5b75ec24181343171a047fe0bd7a888c1e874c --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai @@ -0,0 +1,50 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}.java +package ${bussiPackage}.${entityPackage}.entity; + +import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import java.util.Date; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${subTab.tableName}") +public class ${subTab.entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list subTab.originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == primaryKeyField> + @TableId(type = IdType.UUID) + <#else> + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + <#else> + <#if !subTab.foreignKeys?seq_contains(po.fieldName?cap_first)> + @Excel(name = "${po.filedComment}", width = 15) + + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai index 1e3fdb2261951144140083dbe19e647e6948c71f..34deb8b80f99a5e813b2dc3181b436e7ea6c959e 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai @@ -13,15 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; * @version: V1.0 */ public interface ${entityName}Mapper extends BaseMapper<${entityName}> { - /** - * 通过主表外键批量删除客户 - * @param mainId - * @return - */ - @Delete("DELETE FROM JEECG_ORDER_TICKET WHERE ORDER_ID = #{mainId}") - public boolean deleteTicketsByMainId(String mainId); - - - @Select("SELECT * FROM JEECG_ORDER_TICKET WHERE ORDER_ID = #{mainId}") - public List selectTicketsByMainId(String mainId); + } diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai new file mode 100644 index 0000000000000000000000000000000000000000..e6079305cd7dec1caa8e23a8fde56f91d3635c48 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai @@ -0,0 +1,21 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}Mapper.java +package ${bussiPackage}.${entityPackage}.mapper; + +import java.util.List; +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${subTab.entityName}Mapper extends BaseMapper<${subTab.entityName}> { + + public boolean deleteByMainId(String mainId); + + public List<${subTab.entityName}> selectByMainId(String mainId); +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..708ae0b523ce6848a0d577232a5b2b04ad763f4c --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml @@ -0,0 +1,36 @@ +<#list subTables as subTab> +<#assign originalForeignKeys = subTab.originalForeignKeys> +#segment#${subTab.entityName}Mapper.xml + + + + + + DELETE + FROM ${subTab.tableName} + WHERE + <#list originalForeignKeys as key> + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + ${key} = ${r'#'}{${primaryKeyField}} <#rt/> + <#else> + ${key} = ${r'#'}{${key}} <#rt/> + + <#if key_has_next>AND + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai index c39592fd07ec006261535cb5f047b4cf0cdd5c03..9032bd874acd77868ba69232bea29691f07ae715 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -1,7 +1,13 @@ package ${bussiPackage}.${entityPackage}.service; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + import ${bussiPackage}.${entityPackage}.entity.${entityName}; import com.baomidou.mybatisplus.extension.service.IService; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; /** * @Description: ${tableVo.ftlDescription} @@ -10,32 +16,27 @@ import com.baomidou.mybatisplus.extension.service.IService; * @version: V1.0 */ public interface I${entityName}Service extends IService<${entityName}> { -<#if isSubTable == "true"> - public List selectCustomersByMainId(String mainId); - -<#if isMainTable == "true"> + /** * 添加一对多 * */ - public void saveMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList) ; + public void saveMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) ; /** * 修改一对多 * */ - public void updateMain(JeecgOrderMain jeecgOrderMain,List jeecgOrderCustomerList,List jeecgOrderTicketList); + public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,); /** * 删除一对多 - * @param jformOrderMain */ public void delMain (String id); /** * 批量删除一对多 - * @param jformOrderMain */ public void delBatchMain (Collection idList); - + } diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai new file mode 100644 index 0000000000000000000000000000000000000000..af9138584e6900db17172ff6a649512e4c5acf9e --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai @@ -0,0 +1,19 @@ +<#list subTables as subTab> +#segment#I${subTab.entityName}Service.java +package ${bussiPackage}.${entityPackage}.service; + +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${subTab.entityName}Service extends IService<${subTab.entityName}> { + + public List<${subTab.entityName}> selectByMainId(String mainId); +} + diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai index 31e1b1663c7638b0bf96206f827861355fa8ab2d..5b539dd433d598e72c8ac137bceea73950c091a4 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -1,11 +1,21 @@ package ${bussiPackage}.${entityPackage}.service.impl; import ${bussiPackage}.${entityPackage}.entity.${entityName}; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.mapper.${sub.entityName}Mapper; + import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; import org.springframework.stereotype.Service; - import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import java.io.Serializable; +import java.util.List; +import java.util.Collection; /** * @Description: ${tableVo.ftlDescription} @@ -15,73 +25,77 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; */ @Service public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { -<#if isSubTable == "true"> - @Autowired - private JeecgOrderTicketMapper jeecgOrderTicketMapper; - - @Override - public List selectTicketsByMainId(String mainId) { - return jeecgOrderTicketMapper.selectTicketsByMainId(mainId); - } - -<#if isMainTable == "true"> - @Autowired - private JeecgOrderMainMapper jeecgOrderMainMapper; + @Autowired - private JeecgOrderCustomerMapper jeecgOrderCustomerMapper; + private ${entityName}Mapper ${entityName?uncap_first}Mapper; + <#list subTables as sub> @Autowired - private JeecgOrderTicketMapper jeecgOrderTicketMapper; + private ${sub.entityName}Mapper ${sub.entityName?uncap_first}Mapper; + @Override @Transactional - public void saveMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { - jeecgOrderMainMapper.insert(jeecgOrderMain); - for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { - entity.setOrderId(jeecgOrderMain.getId()); - jeecgOrderCustomerMapper.insert(entity); - } - for(JeecgOrderTicket entity:jeecgOrderTicketList) { - entity.setOrderId(jeecgOrderMain.getId()); - jeecgOrderTicketMapper.insert(entity); + public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) { + ${entityName?uncap_first}Mapper.insert(${entityName?uncap_first}); + <#list subTables as sub> + for(${sub.entityName} entity:${sub.entityName?uncap_first}List) { + <#list sub.foreignKeys as key> + //外键设置 + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}()); + <#else> + entity.set${key?cap_first}(${entityName?uncap_first}.get${key}()); + + + ${sub.entityName?uncap_first}Mapper.insert(entity); } + } @Override @Transactional - public void updateMain(JeecgOrderMain jeecgOrderMain, List jeecgOrderCustomerList, List jeecgOrderTicketList) { - jeecgOrderMainMapper.updateById(jeecgOrderMain); + public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) { + ${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first}); //1.先删除子表数据 - jeecgOrderTicketMapper.deleteTicketsByMainId(jeecgOrderMain.getId()); - jeecgOrderCustomerMapper.deleteCustomersByMainId(jeecgOrderMain.getId()); + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(${entityName?uncap_first}.getId()); + //2.子表数据重新插入 - for(JeecgOrderCustomer entity:jeecgOrderCustomerList) { - entity.setOrderId(jeecgOrderMain.getId()); - jeecgOrderCustomerMapper.insert(entity); - } - for(JeecgOrderTicket entity:jeecgOrderTicketList) { - entity.setOrderId(jeecgOrderMain.getId()); - jeecgOrderTicketMapper.insert(entity); + <#list subTables as sub> + for(${sub.entityName} entity:${sub.entityName?uncap_first}List) { + <#list sub.foreignKeys as key> + //外键设置 + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}()); + <#else> + entity.set${key?cap_first}(${entityName?uncap_first}.get${key}()); + + + ${sub.entityName?uncap_first}Mapper.insert(entity); } + } @Override @Transactional public void delMain(String id) { - jeecgOrderMainMapper.deleteById(id); - jeecgOrderTicketMapper.deleteTicketsByMainId(id); - jeecgOrderCustomerMapper.deleteCustomersByMainId(id); + ${entityName?uncap_first}Mapper.deleteById(id); + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(id); + } @Override @Transactional public void delBatchMain(Collection idList) { for(Serializable id:idList) { - jeecgOrderMainMapper.deleteById(id); - jeecgOrderTicketMapper.deleteTicketsByMainId(id.toString()); - jeecgOrderCustomerMapper.deleteCustomersByMainId(id.toString()); + ${entityName?uncap_first}Mapper.deleteById(id); + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(id.toString()); + } } - + } diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai new file mode 100644 index 0000000000000000000000000000000000000000..c893c7e14384ddd829798b70767e2dc90d1d8050 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai @@ -0,0 +1,30 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}ServiceImpl.java +package ${bussiPackage}.${entityPackage}.service.impl; + +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import ${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper; +import ${bussiPackage}.${entityPackage}.service.I${subTab.entityName}Service; +import org.springframework.stereotype.Service; +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${subTab.entityName}ServiceImpl extends ServiceImpl<${subTab.entityName}Mapper, ${subTab.entityName}> implements I${subTab.entityName}Service { + + @Autowired + private ${subTab.entityName}Mapper ${subTab.entityName?uncap_first}Mapper; + + @Override + public List<${subTab.entityName}> selectByMainId(String mainId) { + return ${subTab.entityName?uncap_first}Mapper.selectByMainId(mainId); + } +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai new file mode 100644 index 0000000000000000000000000000000000000000..2c41c39199c3ec1289b986fd781fdab3ea5d8693 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai @@ -0,0 +1,44 @@ +package ${bussiPackage}.${entityPackage}.vo; + +import java.util.List; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelCollection; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import java.util.Date; + +@Data +public class ${entityName}Page { + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == primaryKeyField> + <#else> + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + <#else> + @Excel(name = "${po.filedComment}", width = 15) + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + + + <#list subTables as sub> + @ExcelCollection(name="${sub.ftlDescription}") + private List<${sub.entityName}> ${sub.entityName?uncap_first}List; + + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei index 54a977e5f6b0471636bb6a2e29a1dafc677ee6e8..abdd79a7710aec5cd5a7a43bbfe3e252a9ed6039 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -5,8 +5,7 @@
- -<#list columns as po> +<#list columns as po><#rt/> <#if po.fieldName !='id' && po_index<= tableVo.searchFieldNum> @@ -15,7 +14,6 @@ - 查询 @@ -30,7 +28,10 @@
新增 - + 导出 + + 导入 + 删除 @@ -42,7 +43,12 @@
@@ -79,46 +85,46 @@ - <${entityName?uncap_first}-modal ref="${entityName?uncap_first}Modal" @ok="modalFormOk"> + <${entityName?uncap_first}-modal ref="modalForm" @ok="modalFormOk"/> + - \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei index 20a115ade5d63f759efd0394442e96f1bee120f2..e6c6807cb60ce3c12983f5acb82bab108b136970 100644 --- a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -1,155 +1,184 @@ \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai new file mode 100644 index 0000000000000000000000000000000000000000..c53a5b0321b63adeb5d4e20307090982a5a0d41d --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/controller/${entityName}Controller.javai @@ -0,0 +1,379 @@ +package ${bussiPackage}.${entityPackage}.controller; + +import java.io.UnsupportedEncodingException; +import java.io.IOException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; + +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.query.QueryGenerator; +import org.jeecg.common.util.oConvertUtils; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import ${bussiPackage}.${entityPackage}.vo.${entityName}Page; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.service.I${sub.entityName}Service; + +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.extern.slf4j.Slf4j; +import com.alibaba.fastjson.JSON; + + /** + * @Title: Controller + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@RestController +@RequestMapping("/${entityPackage}/${entityName?uncap_first}") +@Slf4j +public class ${entityName}Controller { + @Autowired + private I${entityName}Service ${entityName?uncap_first}Service; + <#list subTables as sub> + @Autowired + private I${sub.entityName}Service ${sub.entityName?uncap_first}Service; + + + /** + * 分页列表查询 + * @param ${entityName?uncap_first} + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @GetMapping(value = "/list") + public Result> queryPageList(${entityName} ${entityName?uncap_first}, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + Result> result = new Result>(); + QueryWrapper<${entityName}> queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, req.getParameterMap()); + Page<${entityName}> page = new Page<${entityName}>(pageNo, pageSize); + IPage<${entityName}> pageList = ${entityName?uncap_first}Service.page(page, queryWrapper); + result.setSuccess(true); + result.setResult(pageList); + return result; + } + + /** + * 添加 + * @param ${entityName?uncap_first}Page + * @return + */ + @PostMapping(value = "/add") + public Result<${entityName}> add(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) { + Result<${entityName}> result = new Result<${entityName}>(); + try { + ${entityName} ${entityName?uncap_first} = new ${entityName}(); + BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first}); + + ${entityName?uncap_first}Service.save(${entityName?uncap_first}); + result.success("添加成功!"); + } catch (Exception e) { + e.printStackTrace(); + log.info(e.getMessage()); + result.error500("操作失败"); + } + return result; + } + + /** + * 编辑 + * @param ${entityName?uncap_first}Page + * @return + */ + @PutMapping(value = "/edit") + public Result<${entityName}> edit(@RequestBody ${entityName}Page ${entityName?uncap_first}Page) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = new ${entityName}(); + BeanUtils.copyProperties(${entityName?uncap_first}Page, ${entityName?uncap_first}); + ${entityName} ${entityName?uncap_first}Entity = ${entityName?uncap_first}Service.getById(${entityName?uncap_first}.getId()); + if(${entityName?uncap_first}Entity==null) { + result.error500("未找到对应实体"); + }else { + ${entityName?uncap_first}Service.updateById(${entityName?uncap_first}); + result.success("修改成功!"); + } + + return result; + } + + /** + * 通过id删除 + * @param id + * @return + */ + @DeleteMapping(value = "/delete") + public Result<${entityName}> delete(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + ${entityName?uncap_first}Service.delMain(id); + result.success("删除成功!"); + } + + return result; + } + + /** + * 批量删除 + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch") + public Result<${entityName}> deleteBatch(@RequestParam(name="ids",required=true) String ids) { + Result<${entityName}> result = new Result<${entityName}>(); + if(ids==null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + }else { + this.${entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + /** + * 通过id查询 + * @param id + * @return + */ + @GetMapping(value = "/queryById") + public Result<${entityName}> queryById(@RequestParam(name="id",required=true) String id) { + Result<${entityName}> result = new Result<${entityName}>(); + ${entityName} ${entityName?uncap_first} = ${entityName?uncap_first}Service.getById(id); + if(${entityName?uncap_first}==null) { + result.error500("未找到对应实体"); + }else { + result.setResult(${entityName?uncap_first}); + result.setSuccess(true); + } + return result; + } + + //===========================以下是子表信息操作相关API==================================== + + <#list subTables as sub> + /** + * 通过主表id查询${sub.ftlDescription} + * @param mainId + * @return + */ + @GetMapping(value = "/list${sub.entityName}ByMainId") + public Result> query${sub.entityName}ListByMainId(@RequestParam(name="mainId",required=false) String mainId) { + Result> result = new Result>(); + List<${sub.entityName}> ${sub.entityName?uncap_first}List = null; + if (mainId != null) { + ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(mainId); + result.setResult(${sub.entityName?uncap_first}List); + result.setSuccess(true); + return result; + }else return null; + } + + /** + * 添加${sub.ftlDescription} + * + * @param ${sub.entityName?uncap_first} + * @return + */ + @PostMapping(value = "/add${sub.entityName}") + public Result<${sub.entityName}> add${sub.entityName}(@RequestBody ${sub.entityName} ${sub.entityName?uncap_first}) { + Result<${sub.entityName}> result = new Result<>(); + try { + boolean ok = ${sub.entityName?uncap_first}Service.save(${sub.entityName?uncap_first}); + if (ok) { + result.setSuccess(true); + result.setMessage("添加${sub.ftlDescription}成功."); + } else { + result.setSuccess(false); + result.setMessage("添加${sub.ftlDescription}失败!"); + } + return result; + } catch (Exception e) { + e.fillInStackTrace(); + result.setSuccess(false); + result.setMessage("添加${sub.ftlDescription}过程中出现了异常: " + e.getMessage()); + return result; + } + } + + /** + * 编辑${sub.ftlDescription} + * + * @param ${sub.entityName?uncap_first} + * @return + */ + @PutMapping("/edit${sub.entityName}") + public Result<${sub.entityName}> edit${sub.entityName}(@RequestBody ${sub.entityName} ${sub.entityName?uncap_first}) { + Result<${sub.entityName}> result = new Result<>(); + try { + boolean ok = ${sub.entityName?uncap_first}Service.updateById(${sub.entityName?uncap_first}); + if (ok) { + result.setSuccess(true); + result.setMessage("更新${sub.ftlDescription}成功."); + } else { + result.setSuccess(false); + result.setMessage("更新${sub.ftlDescription}失败!"); + } + return result; + } catch (Exception e) { + result.setSuccess(false); + result.setMessage("更新数据过程中出现异常啦: " + e.getMessage()); + return result; + } + } + + /** + * 通过id删除${sub.ftlDescription} + * + * @param id + * @return + */ + @DeleteMapping(value = "/delete${sub.entityName}") + public Result<${sub.entityName}> delete${sub.entityName}(@RequestParam(name = "id", required = true) String id) { + Result<${sub.entityName}> result = new Result<>(); + try { + boolean ok = ${sub.entityName?uncap_first}Service.removeById(id); + if (ok) { + result.setSuccess(true); + result.setMessage("删除${sub.ftlDescription}成功."); + } else { + result.setSuccess(false); + result.setMessage("删除${sub.ftlDescription}失败!"); + } + return result; + } catch (Exception e) { + result.setSuccess(false); + result.setMessage("删除${sub.ftlDescription}过程中出现异常啦: " + e.getMessage()); + return result; + } + } + + /** + * 批量删除${sub.ftlDescription} + * + * @param ids + * @return + */ + @DeleteMapping(value = "/deleteBatch${sub.entityName}") + public Result<${sub.entityName}> deleteBatch${sub.entityName}(@RequestParam(name = "ids", required = true) String ids) { + Result<${sub.entityName}> result = new Result<${sub.entityName}>(); + if (ids == null || "".equals(ids.trim())) { + result.error500("参数不识别!"); + } else { + this.${sub.entityName?uncap_first}Service.removeByIds(Arrays.asList(ids.split(","))); + result.success("删除成功!"); + } + return result; + } + + + + /** + * 导出excel + * + * @param request + * @param response + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) { + // Step.1 组装查询条件 + QueryWrapper<${entityName}> queryWrapper = null; + try { + String paramsStr = request.getParameter("paramsStr"); + if (oConvertUtils.isNotEmpty(paramsStr)) { + String deString = URLDecoder.decode(paramsStr, "UTF-8"); + ${entityName} ${entityName?uncap_first} = JSON.parseObject(deString, ${entityName}.class); + queryWrapper = QueryGenerator.initQueryWrapper(${entityName?uncap_first}, request.getParameterMap()); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + //Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + List<${entityName}Page> pageList = new ArrayList<${entityName}Page>(); + List<${entityName}> ${entityName?uncap_first}List = ${entityName?uncap_first}Service.list(queryWrapper); + for (${entityName} ${entityName?uncap_first} : ${entityName?uncap_first}List) { + ${entityName}Page vo = new ${entityName}Page(); + BeanUtils.copyProperties(${entityName?uncap_first}, vo); + <#list subTables as sub> + List<${sub.entityName}> ${sub.entityName?uncap_first}List = ${sub.entityName?uncap_first}Service.selectByMainId(${entityName?uncap_first}.getId()); + vo.set${sub.entityName}List(${sub.entityName?uncap_first}List); + + pageList.add(vo); + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "${tableVo.ftlDescription}列表"); + mv.addObject(NormalExcelConstants.CLASS, ${entityName}Page.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("${tableVo.ftlDescription}列表数据", "导出人:Jeecg", "导出信息")); + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + return mv; + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List<${entityName}Page> list = ExcelImportUtil.importExcel(file.getInputStream(), ${entityName}Page.class, params); + for (${entityName}Page page : list) { + ${entityName} po = new ${entityName}(); + BeanUtils.copyProperties(page, po); + ${entityName?uncap_first}Service.saveMain(po, <#list subTables as sub>page.get${sub.entityName}List()<#if sub_has_next>,); + } + return Result.ok("文件导入成功!数据行数:" + list.size()); + } catch (Exception e) { + log.error(e.getMessage()); + return Result.error("文件导入失败!"); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.ok("文件导入失败!"); + } +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai new file mode 100644 index 0000000000000000000000000000000000000000..5cbe5e18bc5b33ca11506b4b816bba9799b4a821 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/${entityName}.javai @@ -0,0 +1,39 @@ +package ${bussiPackage}.${entityPackage}.entity; + +import java.io.Serializable; +import java.util.Date; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${tableName}") +public class ${entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == primaryKeyField> + @TableId(type = IdType.UUID) + + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai new file mode 100644 index 0000000000000000000000000000000000000000..bf376ad679308f78332893abbb3b66751b489e24 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/entity/[1-n]Entity.javai @@ -0,0 +1,49 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}.java +package ${bussiPackage}.${entityPackage}.entity; + +import java.io.Serializable; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Data +@TableName("${subTab.tableName}") +public class ${subTab.entityName} implements Serializable { + private static final long serialVersionUID = 1L; + + <#list subTab.originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == primaryKeyField> + @TableId(type = IdType.UUID) + <#else> + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + <#else> + <#if !subTab.foreignKeys?seq_contains(po.fieldName?cap_first)> + @Excel(name = "${po.filedComment}", width = 15) + + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai new file mode 100644 index 0000000000000000000000000000000000000000..34deb8b80f99a5e813b2dc3181b436e7ea6c959e --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/${entityName}Mapper.javai @@ -0,0 +1,17 @@ +package ${bussiPackage}.${entityPackage}.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${entityName}Mapper extends BaseMapper<${entityName}> { + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai new file mode 100644 index 0000000000000000000000000000000000000000..e6079305cd7dec1caa8e23a8fde56f91d3635c48 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/[1-n]Mapper.javai @@ -0,0 +1,21 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}Mapper.java +package ${bussiPackage}.${entityPackage}.mapper; + +import java.util.List; +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface ${subTab.entityName}Mapper extends BaseMapper<${subTab.entityName}> { + + public boolean deleteByMainId(String mainId); + + public List<${subTab.entityName}> selectByMainId(String mainId); +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..16f3d653ac182f73faac1e009fbce0e63ee39242 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/${entityName}Mapper.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml new file mode 100644 index 0000000000000000000000000000000000000000..708ae0b523ce6848a0d577232a5b2b04ad763f4c --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/mapper/xml/[1-n]Mapper.xml @@ -0,0 +1,36 @@ +<#list subTables as subTab> +<#assign originalForeignKeys = subTab.originalForeignKeys> +#segment#${subTab.entityName}Mapper.xml + + + + + + DELETE + FROM ${subTab.tableName} + WHERE + <#list originalForeignKeys as key> + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + ${key} = ${r'#'}{${primaryKeyField}} <#rt/> + <#else> + ${key} = ${r'#'}{${key}} <#rt/> + + <#if key_has_next>AND + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai new file mode 100644 index 0000000000000000000000000000000000000000..9032bd874acd77868ba69232bea29691f07ae715 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/I${entityName}Service.javai @@ -0,0 +1,42 @@ +package ${bussiPackage}.${entityPackage}.service; + +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +import com.baomidou.mybatisplus.extension.service.IService; +import java.io.Serializable; +import java.util.Collection; +import java.util.List; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${entityName}Service extends IService<${entityName}> { + + /** + * 添加一对多 + * + */ + public void saveMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) ; + + /** + * 修改一对多 + * + */ + public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,); + + /** + * 删除一对多 + */ + public void delMain (String id); + + /** + * 批量删除一对多 + */ + public void delBatchMain (Collection idList); + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai new file mode 100644 index 0000000000000000000000000000000000000000..af9138584e6900db17172ff6a649512e4c5acf9e --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/[1-n]Service.javai @@ -0,0 +1,19 @@ +<#list subTables as subTab> +#segment#I${subTab.entityName}Service.java +package ${bussiPackage}.${entityPackage}.service; + +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +public interface I${subTab.entityName}Service extends IService<${subTab.entityName}> { + + public List<${subTab.entityName}> selectByMainId(String mainId); +} + diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai new file mode 100644 index 0000000000000000000000000000000000000000..5b539dd433d598e72c8ac137bceea73950c091a4 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai @@ -0,0 +1,101 @@ +package ${bussiPackage}.${entityPackage}.service.impl; + +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.mapper.${sub.entityName}Mapper; + +import ${bussiPackage}.${entityPackage}.mapper.${entityName}Mapper; +import ${bussiPackage}.${entityPackage}.service.I${entityName}Service; +import org.springframework.stereotype.Service; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; +import java.io.Serializable; +import java.util.List; +import java.util.Collection; + +/** + * @Description: ${tableVo.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, ${entityName}> implements I${entityName}Service { + + @Autowired + private ${entityName}Mapper ${entityName?uncap_first}Mapper; + <#list subTables as sub> + @Autowired + private ${sub.entityName}Mapper ${sub.entityName?uncap_first}Mapper; + + + @Override + @Transactional + public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) { + ${entityName?uncap_first}Mapper.insert(${entityName?uncap_first}); + <#list subTables as sub> + for(${sub.entityName} entity:${sub.entityName?uncap_first}List) { + <#list sub.foreignKeys as key> + //外键设置 + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}()); + <#else> + entity.set${key?cap_first}(${entityName?uncap_first}.get${key}()); + + + ${sub.entityName?uncap_first}Mapper.insert(entity); + } + + } + + @Override + @Transactional + public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,) { + ${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first}); + + //1.先删除子表数据 + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(${entityName?uncap_first}.getId()); + + + //2.子表数据重新插入 + <#list subTables as sub> + for(${sub.entityName} entity:${sub.entityName?uncap_first}List) { + <#list sub.foreignKeys as key> + //外键设置 + <#if key?lower_case?index_of("${primaryKeyField}")!=-1> + entity.set${key?cap_first}(${entityName?uncap_first}.get${primaryKeyField?cap_first}()); + <#else> + entity.set${key?cap_first}(${entityName?uncap_first}.get${key}()); + + + ${sub.entityName?uncap_first}Mapper.insert(entity); + } + + } + + @Override + @Transactional + public void delMain(String id) { + ${entityName?uncap_first}Mapper.deleteById(id); + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(id); + + } + + @Override + @Transactional + public void delBatchMain(Collection idList) { + for(Serializable id:idList) { + ${entityName?uncap_first}Mapper.deleteById(id); + <#list subTables as sub> + ${sub.entityName?uncap_first}Mapper.deleteByMainId(id.toString()); + + } + } + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai new file mode 100644 index 0000000000000000000000000000000000000000..c893c7e14384ddd829798b70767e2dc90d1d8050 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/[1-n]ServiceImpl.javai @@ -0,0 +1,30 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}ServiceImpl.java +package ${bussiPackage}.${entityPackage}.service.impl; + +import ${bussiPackage}.${entityPackage}.entity.${subTab.entityName}; +import ${bussiPackage}.${entityPackage}.mapper.${subTab.entityName}Mapper; +import ${bussiPackage}.${entityPackage}.service.I${subTab.entityName}Service; +import org.springframework.stereotype.Service; +import java.util.List; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description: ${subTab.ftlDescription} + * @author: jeecg-boot + * @date: ${.now?string["yyyy-MM-dd"]} + * @version: V1.0 + */ +@Service +public class ${subTab.entityName}ServiceImpl extends ServiceImpl<${subTab.entityName}Mapper, ${subTab.entityName}> implements I${subTab.entityName}Service { + + @Autowired + private ${subTab.entityName}Mapper ${subTab.entityName?uncap_first}Mapper; + + @Override + public List<${subTab.entityName}> selectByMainId(String mainId) { + return ${subTab.entityName?uncap_first}Mapper.selectByMainId(mainId); + } +} + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai new file mode 100644 index 0000000000000000000000000000000000000000..7e20b38f9b80869c0bca9349467467c4cdb4dbbb --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vo/${entityName}Page.javai @@ -0,0 +1,43 @@ +package ${bussiPackage}.${entityPackage}.vo; + +import java.util.List; +import ${bussiPackage}.${entityPackage}.entity.${entityName}; +<#list subTables as sub> +import ${bussiPackage}.${entityPackage}.entity.${sub.entityName}; + +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.jeecgframework.poi.excel.annotation.ExcelCollection; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; + +@Data +public class ${entityName}Page { + + <#list originalColumns as po> + /**${po.filedComment}*/ + <#if po.fieldName == primaryKeyField> + <#else> + <#if po.fieldType =='java.util.Date'> + <#if po.fieldDbType =='date'> + @Excel(name = "${po.filedComment}", width = 15, format = "yyyy-MM-dd") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @DateTimeFormat(pattern="yyyy-MM-dd") + <#elseif po.fieldDbType =='datetime'> + @Excel(name = "${po.filedComment}", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + + <#else> + @Excel(name = "${po.filedComment}", width = 15) + + + private <#if po.fieldType=='java.sql.Blob'>byte[]<#else>${po.fieldType} ${po.fieldName}; + + + <#list subTables as sub> + @ExcelCollection(name="${sub.ftlDescription}") + private List<${sub.entityName}> ${sub.entityName?uncap_first}List; + + +} diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei new file mode 100644 index 0000000000000000000000000000000000000000..c0f196ea20a97ad2459daf82dbe46bc017a5e57e --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/${entityName}List.vuei @@ -0,0 +1,258 @@ + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei new file mode 100644 index 0000000000000000000000000000000000000000..fb3601f06190b3948c7409de4ed8fb033c1f538c --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/[1-n]List.vuei @@ -0,0 +1,140 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}List.vue + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei new file mode 100644 index 0000000000000000000000000000000000000000..02c97c22a59cd66034ad38a3701dc155acf25c95 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/${entityName}Modal.vuei @@ -0,0 +1,167 @@ + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei new file mode 100644 index 0000000000000000000000000000000000000000..ee0c9b0fe8c59ae62b2e356d886a01addb2f0bd5 --- /dev/null +++ b/jeecg-boot/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue/modules/[1-n]Modal.vuei @@ -0,0 +1,183 @@ +<#list subTables as subTab> +#segment#${subTab.entityName}Modal.vue + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties b/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties index c8a8df471a7f085ceed231489fe2ca38b598a47a..cecf6a19517c32eeeb76d97545f8920dbf61b6c8 100644 --- a/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties +++ b/jeecg-boot/src/main/resources/jeecg/jeecg_config.properties @@ -13,7 +13,7 @@ source_root_package=src.main.java webroot_package=src.main.webapp #ftl resource url -templatepath=/jeecg/code-template/one +templatepath=/jeecg/code-template system_encoding=utf-8 #db Table id [User defined] diff --git a/jeecg-boot/src/main/resources/logback-spring.xml b/jeecg-boot/src/main/resources/logback-spring.xml index f058602a88f4dd1b2979dbd55aa88a4973604cd5..7e9a273bec5721127b6e07fe3037b0086a6b1dfd 100644 --- a/jeecg-boot/src/main/resources/logback-spring.xml +++ b/jeecg-boot/src/main/resources/logback-spring.xml @@ -1,105 +1,94 @@ - - - - - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n - - - - - - - - ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.log - - 30 - - - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n - - - - 10MB - - - - - - - - - - - %p%d%msg%M%F{32}%L - - - ${LOG_HOME}/error-log.html - - - - - - - - ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.html - - 30 - - - - %p%d%msg%M%F{32}%L - - - - - 10MB - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n + + + + + + + + ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.log + + + 30 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L - %msg%n + + + + 10MB + + + + + + + + + + + %p%d%msg%M%F{32}%L + + + ${LOG_HOME}/error-log.html + + + + + + + + ${LOG_HOME}/jeecgboot.%d{yyyy-MM-dd}.html + + + 30 + + + + %p%d%msg%M%F{32}%L + + + + + 10MB + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jeecg-boot/src/test/java/org/jeecg/SampleTest.java b/jeecg-boot/src/test/java/org/jeecg/SampleTest.java index e56027d48a1276d30f9989e8db93e746c7b4a17d..177cf10330a7279fc2e61ccb658dce9859d1b230 100644 --- a/jeecg-boot/src/test/java/org/jeecg/SampleTest.java +++ b/jeecg-boot/src/test/java/org/jeecg/SampleTest.java @@ -4,9 +4,11 @@ import java.util.List; import javax.annotation.Resource; +import org.jeecg.modules.demo.mock.MockController; import org.jeecg.modules.demo.test.entity.JeecgDemo; import org.jeecg.modules.demo.test.mapper.JeecgDemoMapper; import org.jeecg.modules.demo.test.service.IJeecgDemoService; +import org.jeecg.modules.system.service.ISysDataLogService; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; @@ -21,6 +23,10 @@ public class SampleTest { private JeecgDemoMapper jeecgDemoMapper; @Resource private IJeecgDemoService jeecgDemoService; + @Resource + private ISysDataLogService sysDataLogService; + @Resource + private MockController mock; @Test public void testSelect() { @@ -44,5 +50,18 @@ public class SampleTest { public void testTran() { jeecgDemoService.testTran(); } - + + //author:lvdandan-----date:20190315---for:添加数据日志测试---- + /** + * 测试数据日志添加 + */ + @Test + public void testDataLogSave() { + System.out.println(("----- datalog test ------")); + String tableName = "jeecg_demo"; + String dataId = "4028ef81550c1a7901550c1cd6e70001"; + String dataContent = mock.sysDataLogJson(); + sysDataLogService.addDataLog(tableName, dataId, dataContent); + } + //author:lvdandan-----date:20190315---for:添加数据日志测试---- }