diff --git a/apps/web-antd/src/api/tool/gen/index.ts b/apps/web-antd/src/api/tool/gen/index.ts new file mode 100644 index 00000000..0514d3e0 --- /dev/null +++ b/apps/web-antd/src/api/tool/gen/index.ts @@ -0,0 +1,102 @@ +import type { GenInfo } from './model'; + +import type { ID, IDS } from '#/api/common'; + +import { ContentTypeEnum } from '#/api/helper'; +import { requestClient } from '#/api/request'; + +enum Api { + batchGenCode = '/tool/gen/batchGenCode', + columnList = '/tool/gen/column', + dataSourceNames = '/tool/gen/getDataNames', + download = '/tool/gen/download', + genCode = '/tool/gen/genCode', + generatedList = '/tool/gen/list', + importTable = '/tool/gen/importTable', + preview = '/tool/gen/preview', + readyToGenList = '/tool/gen/db/list', + root = '/tool/gen', + syncDb = '/tool/gen/synchDb', +} +// 查询代码生成列表 +export function generatedList(params: any) { + return requestClient.get(Api.generatedList, { params }); +} + +// 修改代码生成业务 +export function genInfo(tableId: ID) { + return requestClient.get(`${Api.root}/${tableId}`); +} + +// 查询数据库列表 +export function readyToGenList(params: any) { + return requestClient.get(Api.readyToGenList, { params }); +} + +// 查询数据表字段列表 +export function columnList(tableId: ID) { + return requestClient.get(`${Api.columnList}/${tableId}`); +} + +/** + * 导入表结构(保存) + * @param tables table名称数组 如sys_a, sys_b + * @param dataName 数据源名称 + * @returns ret + */ +export function importTable(tables: string | string[], dataName: string) { + return requestClient.postWithMsg( + Api.importTable, + { dataName, tables }, + { + headers: { 'Content-Type': ContentTypeEnum.FORM_URLENCODED }, + }, + ); +} + +// 修改保存代码生成业务 +export function editSave(data: any) { + return requestClient.putWithMsg(Api.root, data); +} + +// 删除代码生成 +export function genRemove(tableIds: IDS) { + return requestClient.deleteWithMsg(`${Api.root}/${tableIds}`); +} +// 预览代码 +export function previewCode(tableId: ID) { + return requestClient.get<{ [key: string]: string }>( + `${Api.preview}/${tableId}`, + ); +} + +// 生成代码(下载方式) +export function genDownload(tableId: ID) { + return requestClient.get(`${Api.download}/${tableId}`); +} + +// 生成代码(自定义路径) +export function genDownloadWithPath(tableId: ID) { + return requestClient.get(`${Api.download}/${tableId}`); +} + +// 同步数据库 +export function syncDb(tableId: ID) { + return requestClient.get(`${Api.syncDb}/${tableId}`, { + successMessageMode: 'message', + }); +} + +// 批量生成代码 +export function batchGenCode(tableIdStr: ID | IDS) { + return requestClient.get(Api.batchGenCode, { + isTransformResponse: false, + params: { tableIdStr }, + responseType: 'blob', + }); +} + +// 查询数据源名称列表 +export function getDataSourceNames() { + return requestClient.get(Api.dataSourceNames); +} diff --git a/apps/web-antd/src/api/tool/gen/model.d.ts b/apps/web-antd/src/api/tool/gen/model.d.ts new file mode 100644 index 00000000..7b097dbf --- /dev/null +++ b/apps/web-antd/src/api/tool/gen/model.d.ts @@ -0,0 +1,185 @@ +export interface Column { + createDept?: any; + createBy?: any; + createTime?: any; + updateBy?: any; + updateTime?: any; + columnId: string; + tableId: string; + columnName: string; + columnComment: string; + columnType: string; + javaType: string; + javaField: string; + isPk: string; + isIncrement: string; + isRequired: string; + isInsert?: any; + isEdit: string; + isList: string; + isQuery?: any; + queryType: string; + htmlType: string; + dictType: string; + sort: number; + list: boolean; + required: boolean; + pk: boolean; + insert: boolean; + edit: boolean; + usableColumn: boolean; + superColumn: boolean; + increment: boolean; + query: boolean; + capJavaField: string; +} + +export interface Table { + createDept?: any; + createBy?: any; + createTime?: any; + updateBy?: any; + updateTime?: any; + tableId: string; + dataName: string; + tableName: string; + tableComment: string; + subTableName?: any; + subTableFkName?: any; + className: string; + tplCategory: string; + packageName: string; + moduleName: string; + businessName: string; + functionName: string; + functionAuthor: string; + genType?: any; + genPath?: any; + pkColumn?: any; + columns: Column[]; + options?: any; + remark?: any; + treeCode?: any; + treeParentCode?: any; + treeName?: any; + menuIds?: any; + parentMenuId?: any; + parentMenuName?: any; + tree: boolean; + crud: boolean; +} + +export interface Row { + createDept: number; + createBy: number; + createTime: string; + updateBy: number; + updateTime: string; + columnId: string; + tableId: string; + columnName: string; + columnComment: string; + columnType: string; + javaType: string; + javaField: string; + isPk: string; + isIncrement: string; + isRequired: string; + isInsert?: any; + isEdit: string; + isList: string; + isQuery?: any; + queryType: string; + htmlType: string; + dictType: string; + sort: number; + list: boolean; + required: boolean; + pk: boolean; + insert: boolean; + edit: boolean; + usableColumn: boolean; + superColumn: boolean; + increment: boolean; + query: boolean; + capJavaField: string; +} + +export interface Column { + createDept?: any; + createBy?: any; + createTime?: any; + updateBy?: any; + updateTime?: any; + columnId: string; + tableId: string; + columnName: string; + columnComment: string; + columnType: string; + javaType: string; + javaField: string; + isPk: string; + isIncrement: string; + isRequired: string; + isInsert?: any; + isEdit: string; + isList: string; + isQuery?: any; + queryType: string; + htmlType: string; + dictType: string; + sort: number; + list: boolean; + required: boolean; + pk: boolean; + insert: boolean; + edit: boolean; + usableColumn: boolean; + superColumn: boolean; + increment: boolean; + query: boolean; + capJavaField: string; +} + +export interface Info { + createDept?: any; + createBy?: any; + createTime?: any; + updateBy?: any; + updateTime?: any; + tableId: string; + dataName: string; + tableName: string; + tableComment: string; + subTableName?: any; + subTableFkName?: any; + className: string; + tplCategory: string; + packageName: string; + moduleName: string; + businessName: string; + functionName: string; + functionAuthor: string; + genType: string; + genPath: string; + pkColumn?: any; + columns: Column[]; + options?: any; + remark?: any; + treeCode?: any; + treeParentCode?: any; + treeName?: any; + menuIds?: any; + parentMenuId?: any; + parentMenuName?: any; + tree: boolean; + crud: boolean; + // 树表需要添加此属性 + params?: any; +} + +export interface GenInfo { + tables: Table[]; + rows: Row[]; + info: Info; +} diff --git a/apps/web-antd/src/locales/langs/en-US.json b/apps/web-antd/src/locales/langs/en-US.json index d23790d7..7049c320 100644 --- a/apps/web-antd/src/locales/langs/en-US.json +++ b/apps/web-antd/src/locales/langs/en-US.json @@ -50,7 +50,8 @@ "sync": "Sync", "refresh": "Refresh", "generate": "Generate", - "downloadLoading": "Downloading... Please wait." + "downloadLoading": "Downloading... Please wait.", + "preview": "Preview" } } } diff --git a/apps/web-antd/src/locales/langs/zh-CN.json b/apps/web-antd/src/locales/langs/zh-CN.json index 79e90cfe..5c6e4986 100644 --- a/apps/web-antd/src/locales/langs/zh-CN.json +++ b/apps/web-antd/src/locales/langs/zh-CN.json @@ -50,7 +50,8 @@ "sync": "同步", "refresh": "刷新", "generate": "生成", - "downloadLoading": "下载中, 请稍后..." + "downloadLoading": "下载中, 请稍后...", + "preview": "预览" } } } diff --git a/apps/web-antd/src/router/routes/local.ts b/apps/web-antd/src/router/routes/local.ts index ee967476..fb076e68 100644 --- a/apps/web-antd/src/router/routes/local.ts +++ b/apps/web-antd/src/router/routes/local.ts @@ -57,6 +57,30 @@ const profileRoute: RouteRecordStringComponent[] = [ }, ], }, + { + component: 'BasicLayout', + meta: { + hideChildrenInMenu: true, + hideInMenu: true, + title: '修改生成配置', + }, + name: 'GenConfig', + path: '/', + redirect: '/code-gen/edit', + children: [ + { + component: '/tool/gen/edit-gen', + meta: { + activePath: '/tool/gen', + icon: 'mingcute:profile-line', + keepAlive: true, + title: '生成配置', + }, + name: 'GenConfigIndex', + path: '/code-gen/edit/:tableId', + }, + ], + }, ]; /** diff --git a/apps/web-antd/src/views/tool/gen/code-preview-modal.vue b/apps/web-antd/src/views/tool/gen/code-preview-modal.vue index b79afa5a..f1c3700d 100644 --- a/apps/web-antd/src/views/tool/gen/code-preview-modal.vue +++ b/apps/web-antd/src/views/tool/gen/code-preview-modal.vue @@ -1,4 +1,5 @@ diff --git a/apps/web-antd/src/views/tool/gen/edit-gen.vue b/apps/web-antd/src/views/tool/gen/edit-gen.vue new file mode 100644 index 00000000..704113f7 --- /dev/null +++ b/apps/web-antd/src/views/tool/gen/edit-gen.vue @@ -0,0 +1,26 @@ + + + diff --git a/apps/web-antd/src/views/tool/gen/index.vue b/apps/web-antd/src/views/tool/gen/index.vue index 6b5d5a74..6779e029 100644 --- a/apps/web-antd/src/views/tool/gen/index.vue +++ b/apps/web-antd/src/views/tool/gen/index.vue @@ -1,20 +1,126 @@ diff --git a/apps/web-antd/src/views/tool/gen/preview.json b/apps/web-antd/src/views/tool/gen/preview.json deleted file mode 100644 index 88dc5d2f..00000000 --- a/apps/web-antd/src/views/tool/gen/preview.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "code": 200, - "msg": "操作成功", - "data": { - "vm/java/domain.java.vm": "package org.dromara.system.domain;\n\nimport org.dromara.common.tenant.core.TenantEntity;\nimport com.baomidou.mybatisplus.annotation.*;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\n\nimport java.io.Serial;\n\n/**\n * 通知公告对象 sys_notice\n *\n * @author Lion Li\n * @date 2024-09-13\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@TableName(\"sys_notice\")\npublic class SysNotice extends TenantEntity {\n\n @Serial\n private static final long serialVersionUID = 1L;\n\n /**\n * 公告ID\n */\n @TableId(value = \"notice_id\")\n private Long noticeId;\n\n /**\n * 公告标题\n */\n private String noticeTitle;\n\n /**\n * 公告类型(1通知 2公告)\n */\n private String noticeType;\n\n /**\n * 公告内容\n */\n private String noticeContent;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n private String status;\n\n /**\n * 备注\n */\n private String remark;\n\n\n}\n", - "vm/java/vo.java.vm": "package org.dromara.system.domain.vo;\n\nimport org.dromara.system.domain.SysNotice;\nimport com.alibaba.excel.annotation.ExcelIgnoreUnannotated;\nimport com.alibaba.excel.annotation.ExcelProperty;\nimport org.dromara.common.excel.annotation.ExcelDictFormat;\nimport org.dromara.common.excel.convert.ExcelDictConvert;\nimport io.github.linpeilie.annotations.AutoMapper;\nimport lombok.Data;\n\nimport java.io.Serial;\nimport java.io.Serializable;\nimport java.util.Date;\n\n\n\n/**\n * 通知公告视图对象 sys_notice\n *\n * @author Lion Li\n * @date 2024-09-13\n */\n@Data\n@ExcelIgnoreUnannotated\n@AutoMapper(target = SysNotice.class)\npublic class SysNoticeVo implements Serializable {\n\n @Serial\n private static final long serialVersionUID = 1L;\n\n /**\n * 公告ID\n */\n @ExcelProperty(value = \"公告ID\")\n private Long noticeId;\n\n /**\n * 公告标题\n */\n @ExcelProperty(value = \"公告标题\")\n private String noticeTitle;\n\n /**\n * 公告类型(1通知 2公告)\n */\n @ExcelProperty(value = \"公告类型\", converter = ExcelDictConvert.class)\n @ExcelDictFormat(readConverterExp = \"1=通知,2=公告\")\n private String noticeType;\n\n /**\n * 公告内容\n */\n @ExcelProperty(value = \"公告内容\")\n private String noticeContent;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n @ExcelProperty(value = \"公告状态\", converter = ExcelDictConvert.class)\n @ExcelDictFormat(readConverterExp = \"0=正常,1=关闭\")\n private String status;\n\n /**\n * 备注\n */\n @ExcelProperty(value = \"备注\")\n private String remark;\n\n\n}\n", - "vm/java/bo.java.vm": "package org.dromara.system.domain.bo;\n\nimport org.dromara.system.domain.SysNotice;\nimport org.dromara.common.mybatis.core.domain.BaseEntity;\nimport org.dromara.common.core.validate.AddGroup;\nimport org.dromara.common.core.validate.EditGroup;\nimport io.github.linpeilie.annotations.AutoMapper;\nimport lombok.Data;\nimport lombok.EqualsAndHashCode;\nimport jakarta.validation.constraints.*;\n\n/**\n * 通知公告业务对象 sys_notice\n *\n * @author Lion Li\n * @date 2024-09-13\n */\n@Data\n@EqualsAndHashCode(callSuper = true)\n@AutoMapper(target = SysNotice.class, reverseConvertGenerate = false)\npublic class SysNoticeBo extends BaseEntity {\n\n /**\n * 公告ID\n */\n @NotNull(message = \"公告ID不能为空\", groups = { EditGroup.class })\n private Long noticeId;\n\n /**\n * 公告标题\n */\n @NotBlank(message = \"公告标题不能为空\", groups = { AddGroup.class, EditGroup.class })\n private String noticeTitle;\n\n /**\n * 公告类型(1通知 2公告)\n */\n @NotBlank(message = \"公告类型(1通知 2公告)不能为空\", groups = { AddGroup.class, EditGroup.class })\n private String noticeType;\n\n /**\n * 公告内容\n */\n @NotBlank(message = \"公告内容不能为空\", groups = { AddGroup.class, EditGroup.class })\n private String noticeContent;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n @NotBlank(message = \"公告状态(0正常 1关闭)不能为空\", groups = { AddGroup.class, EditGroup.class })\n private String status;\n\n /**\n * 备注\n */\n @NotBlank(message = \"备注不能为空\", groups = { AddGroup.class, EditGroup.class })\n private String remark;\n\n\n}\n", - "vm/java/mapper.java.vm": "package org.dromara.system.mapper;\n\nimport org.dromara.system.domain.SysNotice;\nimport org.dromara.system.domain.vo.SysNoticeVo;\nimport org.dromara.common.mybatis.core.mapper.BaseMapperPlus;\n\n/**\n * 通知公告Mapper接口\n *\n * @author Lion Li\n * @date 2024-09-13\n */\npublic interface SysNoticeMapper extends BaseMapperPlus {\n\n}\n", - "vm/java/service.java.vm": "package org.dromara.system.service;\n\nimport org.dromara.system.domain.vo.SysNoticeVo;\nimport org.dromara.system.domain.bo.SysNoticeBo;\nimport org.dromara.common.mybatis.core.page.TableDataInfo;\nimport org.dromara.common.mybatis.core.page.PageQuery;\n\nimport java.util.Collection;\nimport java.util.List;\n\n/**\n * 通知公告Service接口\n *\n * @author Lion Li\n * @date 2024-09-13\n */\npublic interface ISysNoticeService {\n\n /**\n * 查询通知公告\n *\n * @param noticeId 主键\n * @return 通知公告\n */\n SysNoticeVo queryById(Long noticeId);\n\n /**\n * 分页查询通知公告列表\n *\n * @param bo 查询条件\n * @param pageQuery 分页参数\n * @return 通知公告分页列表\n */\n TableDataInfo queryPageList(SysNoticeBo bo, PageQuery pageQuery);\n\n /**\n * 查询符合条件的通知公告列表\n *\n * @param bo 查询条件\n * @return 通知公告列表\n */\n List queryList(SysNoticeBo bo);\n\n /**\n * 新增通知公告\n *\n * @param bo 通知公告\n * @return 是否新增成功\n */\n Boolean insertByBo(SysNoticeBo bo);\n\n /**\n * 修改通知公告\n *\n * @param bo 通知公告\n * @return 是否修改成功\n */\n Boolean updateByBo(SysNoticeBo bo);\n\n /**\n * 校验并批量删除通知公告信息\n *\n * @param ids 待删除的主键集合\n * @param isValid 是否进行有效性校验\n * @return 是否删除成功\n */\n Boolean deleteWithValidByIds(Collection ids, Boolean isValid);\n}\n", - "vm/java/serviceImpl.java.vm": "package org.dromara.system.service.impl;\n\nimport org.dromara.common.core.utils.MapstructUtils;\nimport org.dromara.common.core.utils.StringUtils;\nimport org.dromara.common.mybatis.core.page.TableDataInfo;\nimport org.dromara.common.mybatis.core.page.PageQuery;\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;\nimport com.baomidou.mybatisplus.core.toolkit.Wrappers;\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.stereotype.Service;\nimport org.dromara.system.domain.bo.SysNoticeBo;\nimport org.dromara.system.domain.vo.SysNoticeVo;\nimport org.dromara.system.domain.SysNotice;\nimport org.dromara.system.mapper.SysNoticeMapper;\nimport org.dromara.system.service.ISysNoticeService;\n\nimport java.util.List;\nimport java.util.Map;\nimport java.util.Collection;\n\n/**\n * 通知公告Service业务层处理\n *\n * @author Lion Li\n * @date 2024-09-13\n */\n@RequiredArgsConstructor\n@Service\npublic class SysNoticeServiceImpl implements ISysNoticeService {\n\n private final SysNoticeMapper baseMapper;\n\n /**\n * 查询通知公告\n *\n * @param noticeId 主键\n * @return 通知公告\n */\n @Override\n public SysNoticeVo queryById(Long noticeId){\n return baseMapper.selectVoById(noticeId);\n }\n\n /**\n * 分页查询通知公告列表\n *\n * @param bo 查询条件\n * @param pageQuery 分页参数\n * @return 通知公告分页列表\n */\n @Override\n public TableDataInfo queryPageList(SysNoticeBo bo, PageQuery pageQuery) {\n LambdaQueryWrapper lqw = buildQueryWrapper(bo);\n Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);\n return TableDataInfo.build(result);\n }\n\n /**\n * 查询符合条件的通知公告列表\n *\n * @param bo 查询条件\n * @return 通知公告列表\n */\n @Override\n public List queryList(SysNoticeBo bo) {\n LambdaQueryWrapper lqw = buildQueryWrapper(bo);\n return baseMapper.selectVoList(lqw);\n }\n\n private LambdaQueryWrapper buildQueryWrapper(SysNoticeBo bo) {\n Map params = bo.getParams();\n LambdaQueryWrapper lqw = Wrappers.lambdaQuery();\n lqw.eq(StringUtils.isNotBlank(bo.getNoticeTitle()), SysNotice::getNoticeTitle, bo.getNoticeTitle());\n lqw.eq(StringUtils.isNotBlank(bo.getNoticeType()), SysNotice::getNoticeType, bo.getNoticeType());\n lqw.eq(StringUtils.isNotBlank(bo.getNoticeContent()), SysNotice::getNoticeContent, bo.getNoticeContent());\n lqw.eq(StringUtils.isNotBlank(bo.getStatus()), SysNotice::getStatus, bo.getStatus());\n return lqw;\n }\n\n /**\n * 新增通知公告\n *\n * @param bo 通知公告\n * @return 是否新增成功\n */\n @Override\n public Boolean insertByBo(SysNoticeBo bo) {\n SysNotice add = MapstructUtils.convert(bo, SysNotice.class);\n validEntityBeforeSave(add);\n boolean flag = baseMapper.insert(add) > 0;\n if (flag) {\n bo.setNoticeId(add.getNoticeId());\n }\n return flag;\n }\n\n /**\n * 修改通知公告\n *\n * @param bo 通知公告\n * @return 是否修改成功\n */\n @Override\n public Boolean updateByBo(SysNoticeBo bo) {\n SysNotice update = MapstructUtils.convert(bo, SysNotice.class);\n validEntityBeforeSave(update);\n return baseMapper.updateById(update) > 0;\n }\n\n /**\n * 保存前的数据校验\n */\n private void validEntityBeforeSave(SysNotice entity){\n //TODO 做一些数据校验,如唯一约束\n }\n\n /**\n * 校验并批量删除通知公告信息\n *\n * @param ids 待删除的主键集合\n * @param isValid 是否进行有效性校验\n * @return 是否删除成功\n */\n @Override\n public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {\n if(isValid){\n //TODO 做一些业务上的校验,判断是否需要校验\n }\n return baseMapper.deleteByIds(ids) > 0;\n }\n}\n", - "vm/java/controller.java.vm": "package org.dromara.system.controller;\n\nimport java.util.List;\n\nimport lombok.RequiredArgsConstructor;\nimport jakarta.servlet.http.HttpServletResponse;\nimport jakarta.validation.constraints.*;\nimport cn.dev33.satoken.annotation.SaCheckPermission;\nimport org.springframework.web.bind.annotation.*;\nimport org.springframework.validation.annotation.Validated;\nimport org.dromara.common.idempotent.annotation.RepeatSubmit;\nimport org.dromara.common.log.annotation.Log;\nimport org.dromara.common.web.core.BaseController;\nimport org.dromara.common.mybatis.core.page.PageQuery;\nimport org.dromara.common.core.domain.R;\nimport org.dromara.common.core.validate.AddGroup;\nimport org.dromara.common.core.validate.EditGroup;\nimport org.dromara.common.log.enums.BusinessType;\nimport org.dromara.common.excel.utils.ExcelUtil;\nimport org.dromara.system.domain.vo.SysNoticeVo;\nimport org.dromara.system.domain.bo.SysNoticeBo;\nimport org.dromara.system.service.ISysNoticeService;\nimport org.dromara.common.mybatis.core.page.TableDataInfo;\n\n/**\n * 通知公告\n *\n * @author Lion Li\n * @date 2024-09-13\n */\n@Validated\n@RequiredArgsConstructor\n@RestController\n@RequestMapping(\"/system/notice\")\npublic class SysNoticeController extends BaseController {\n\n private final ISysNoticeService sysNoticeService;\n\n /**\n * 查询通知公告列表\n */\n @SaCheckPermission(\"system:notice:list\")\n @GetMapping(\"/list\")\n public TableDataInfo list(SysNoticeBo bo, PageQuery pageQuery) {\n return sysNoticeService.queryPageList(bo, pageQuery);\n }\n\n /**\n * 导出通知公告列表\n */\n @SaCheckPermission(\"system:notice:export\")\n @Log(title = \"通知公告\", businessType = BusinessType.EXPORT)\n @PostMapping(\"/export\")\n public void export(SysNoticeBo bo, HttpServletResponse response) {\n List list = sysNoticeService.queryList(bo);\n ExcelUtil.exportExcel(list, \"通知公告\", SysNoticeVo.class, response);\n }\n\n /**\n * 获取通知公告详细信息\n *\n * @param noticeId 主键\n */\n @SaCheckPermission(\"system:notice:query\")\n @GetMapping(\"/{noticeId}\")\n public R getInfo(@NotNull(message = \"主键不能为空\")\n @PathVariable Long noticeId) {\n return R.ok(sysNoticeService.queryById(noticeId));\n }\n\n /**\n * 新增通知公告\n */\n @SaCheckPermission(\"system:notice:add\")\n @Log(title = \"通知公告\", businessType = BusinessType.INSERT)\n @RepeatSubmit()\n @PostMapping()\n public R add(@Validated(AddGroup.class) @RequestBody SysNoticeBo bo) {\n return toAjax(sysNoticeService.insertByBo(bo));\n }\n\n /**\n * 修改通知公告\n */\n @SaCheckPermission(\"system:notice:edit\")\n @Log(title = \"通知公告\", businessType = BusinessType.UPDATE)\n @RepeatSubmit()\n @PutMapping()\n public R edit(@Validated(EditGroup.class) @RequestBody SysNoticeBo bo) {\n return toAjax(sysNoticeService.updateByBo(bo));\n }\n\n /**\n * 删除通知公告\n *\n * @param noticeIds 主键串\n */\n @SaCheckPermission(\"system:notice:remove\")\n @Log(title = \"通知公告\", businessType = BusinessType.DELETE)\n @DeleteMapping(\"/{noticeIds}\")\n public R remove(@NotEmpty(message = \"主键不能为空\")\n @PathVariable Long[] noticeIds) {\n return toAjax(sysNoticeService.deleteWithValidByIds(List.of(noticeIds), true));\n }\n}\n", - "vm/xml/mapper.xml.vm": "\n\n\n\n\n", - "vm/sql/sql.vm": "-- 菜单 SQL\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983745, '通知公告', '3', '1', 'notice', 'system/notice/index', 1, 0, 'C', '0', '0', 'system:notice:list', '#', 103, 1, sysdate(), null, null, '通知公告菜单');\n\n-- 按钮 SQL\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983746, '通知公告查询', 1834422614669983745, '1', '#', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 103, 1, sysdate(), null, null, '');\n\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983747, '通知公告新增', 1834422614669983745, '2', '#', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 103, 1, sysdate(), null, null, '');\n\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983748, '通知公告修改', 1834422614669983745, '3', '#', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 103, 1, sysdate(), null, null, '');\n\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983749, '通知公告删除', 1834422614669983745, '4', '#', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 103, 1, sysdate(), null, null, '');\n\ninsert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)\nvalues(1834422614669983750, '通知公告导出', 1834422614669983745, '5', '#', '', 1, 0, 'F', '0', '0', 'system:notice:export', '#', 103, 1, sysdate(), null, null, '');\n", - "vm/ts/api.ts.vm": "import request from '@/utils/request';\nimport { AxiosPromise } from 'axios';\nimport { NoticeVO, NoticeForm, NoticeQuery } from '@/api/system/notice/types';\n\n/**\n * 查询通知公告列表\n * @param query\n * @returns {*}\n */\n\nexport const listNotice = (query?: NoticeQuery): AxiosPromise => {\n return request({\n url: '/system/notice/list',\n method: 'get',\n params: query\n });\n};\n\n/**\n * 查询通知公告详细\n * @param noticeId\n */\nexport const getNotice = (noticeId: string | number): AxiosPromise => {\n return request({\n url: '/system/notice/' + noticeId,\n method: 'get'\n });\n};\n\n/**\n * 新增通知公告\n * @param data\n */\nexport const addNotice = (data: NoticeForm) => {\n return request({\n url: '/system/notice',\n method: 'post',\n data: data\n });\n};\n\n/**\n * 修改通知公告\n * @param data\n */\nexport const updateNotice = (data: NoticeForm) => {\n return request({\n url: '/system/notice',\n method: 'put',\n data: data\n });\n};\n\n/**\n * 删除通知公告\n * @param noticeId\n */\nexport const delNotice = (noticeId: string | number | Array) => {\n return request({\n url: '/system/notice/' + noticeId,\n method: 'delete'\n });\n};\n", - "vm/ts/types.ts.vm": "export interface NoticeVO {\n /**\n * 公告ID\n */\n noticeId: string | number;\n\n /**\n * 公告标题\n */\n noticeTitle: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType: string;\n\n /**\n * 公告内容\n */\n noticeContent: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status: string;\n\n /**\n * 备注\n */\n remark: string;\n\n}\n\nexport interface NoticeForm extends BaseEntity {\n /**\n * 公告ID\n */\n noticeId?: string | number;\n\n /**\n * 公告标题\n */\n noticeTitle?: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType?: string;\n\n /**\n * 公告内容\n */\n noticeContent?: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status?: string;\n\n /**\n * 备注\n */\n remark?: string;\n\n}\n\nexport interface NoticeQuery extends PageQuery {\n\n /**\n * 公告标题\n */\n noticeTitle?: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType?: string;\n\n /**\n * 公告内容\n */\n noticeContent?: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status?: string;\n\n /**\n * 日期范围参数\n */\n params?: any;\n}\n\n\n\n", - "vm/vue/index.vue.vm": "\n\n\n", - "vm/vben/api/index.ts.vm": "import { defHttp } from '@/utils/http/axios';\nimport { ID, IDS, commonExport } from '@/api/base';\nimport { NoticeVO, NoticeForm, NoticeQuery } from './model';\n\n/**\n * 查询通知公告列表\n * @param params\n * @returns\n */\nexport function noticeList(params?: NoticeQuery) {\n return defHttp.get({ url: '/system/notice/list', params });\n}\n\n/**\n * 导出通知公告列表\n * @param params\n * @returns\n */\nexport function noticeExport(params?: NoticeQuery) {\n return commonExport('/system/notice/export', params ?? {});\n}\n\n/**\n * 查询通知公告详细\n * @param noticeId id\n * @returns\n */\nexport function noticeInfo(noticeId: ID) {\n return defHttp.get({ url: '/system/notice/' + noticeId });\n}\n\n/**\n * 新增通知公告\n * @param data\n * @returns\n */\nexport function noticeAdd(data: NoticeForm) {\n return defHttp.postWithMsg({ url: '/system/notice', data });\n}\n\n/**\n * 更新通知公告\n * @param data\n * @returns\n */\nexport function noticeUpdate(data: NoticeForm) {\n return defHttp.putWithMsg({ url: '/system/notice', data });\n}\n\n/**\n * 删除通知公告\n * @param noticeId id\n * @returns\n */\nexport function noticeRemove(noticeId: ID | IDS) {\n return defHttp.deleteWithMsg({ url: '/system/notice/' + noticeId });\n}\n", - "vm/vben/api/model.ts.vm": "import { BaseEntity, PageQuery } from '@/api/base';\n\nexport interface NoticeVO {\n /**\n * 公告ID\n */\n noticeId: string | number;\n\n /**\n * 公告标题\n */\n noticeTitle: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType: string;\n\n /**\n * 公告内容\n */\n noticeContent: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status: string;\n\n /**\n * 备注\n */\n remark: string;\n\n}\n\nexport interface NoticeForm extends BaseEntity {\n /**\n * 公告ID\n */\n noticeId?: string | number;\n\n /**\n * 公告标题\n */\n noticeTitle?: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType?: string;\n\n /**\n * 公告内容\n */\n noticeContent?: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status?: string;\n\n /**\n * 备注\n */\n remark?: string;\n\n}\n\nexport interface NoticeQuery extends PageQuery {\n /**\n * 公告标题\n */\n noticeTitle?: string;\n\n /**\n * 公告类型(1通知 2公告)\n */\n noticeType?: string;\n\n /**\n * 公告内容\n */\n noticeContent?: string;\n\n /**\n * 公告状态(0正常 1关闭)\n */\n status?: string;\n\n /**\n * 日期范围参数\n */\n params?: any;\n}\n", - "vm/vben/views/data.ts.vm": "import { BasicColumn } from '@/components/Table';\nimport { FormSchema } from '@/components/Form';\n\nexport const formSchemas: FormSchema[] = [\n {\n label: '公告标题',\n field: 'noticeTitle',\n component: 'Input',\n },\n {\n label: '公告类型',\n field: 'noticeType',\n component: 'Select',\n },\n {\n label: '公告内容',\n field: 'noticeContent',\n component: 'Input',\n },\n {\n label: '公告状态',\n field: 'status',\n component: 'RadioButtonGroup',\n },\n];\n\nexport const columns: BasicColumn[] = [\n {\n title: '公告ID',\n dataIndex: 'noticeId',\n },\n {\n title: '公告标题',\n dataIndex: 'noticeTitle',\n },\n {\n title: '公告类型',\n dataIndex: 'noticeType',\n },\n {\n title: '公告内容',\n dataIndex: 'noticeContent',\n },\n {\n title: '公告状态',\n dataIndex: 'status',\n },\n {\n title: '备注',\n dataIndex: 'remark',\n },\n];\n\nexport const modalSchemas: FormSchema[] = [\n {\n label: '公告ID',\n field: 'noticeId',\n required: false,\n component: 'Input',\n show: false,\n },\n {\n label: '公告标题',\n field: 'noticeTitle',\n required: true,\n component: 'Input',\n },\n {\n label: '公告类型',\n field: 'noticeType',\n required: true,\n component: 'Select',\n },\n {\n label: '公告内容',\n field: 'noticeContent',\n required: true,\n component: 'RichTextarea',\n /**\n * 注意 好像没啥可写的\n */\n componentProps: {\n // 没啥可写的\n }, \n },\n {\n label: '公告状态',\n field: 'status',\n required: true,\n component: 'RadioButtonGroup',\n },\n {\n label: '备注',\n field: 'remark',\n required: true,\n component: 'Input',\n },\n];\n", - "vm/vben/views/index_vben.vue.vm": "\n\n\n\n\n", - "vm/vben/views/modal.vue.vm": "\n\n\n\n\n" - } -}