diff --git a/commitlint.config.cjs b/commitlint.config.cjs index 89f188eb..f30d2852 100644 --- a/commitlint.config.cjs +++ b/commitlint.config.cjs @@ -51,9 +51,10 @@ module.exports = { { value: "perf", name: "性能: 🚀 性能优化", emoji: ":zap:" }, { value: "test", name: "测试: 🧪 添加疏漏测试或已有测试改动", emoji: ":white_check_mark:"}, { value: "build", name: "构建: 📦️ 构建流程、外部依赖变更(如升级 npm 包、修改 vite 配置等)", emoji: ":package:"}, - { value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"}, - { value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"}, - { value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"}, + { value: "ci", name: "集成: ⚙️ 修改 CI 配置、脚本", emoji: ":ferris_wheel:"}, + { value: "revert", name: "回退: ↩️ 回滚 commit",emoji: ":rewind:"}, + { value: "chore", name: "其他: 🛠️ 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)", emoji: ":hammer:"}, + { value: "wip", name: "开发中: 🚧 开发阶段临时提交", emoji: ":construction:"}, ], useEmoji: true, emojiAlign: "center", diff --git a/package.json b/package.json index d4a35d77..b2445f9f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vue3-element-admin", - "version": "2.12.0", + "version": "2.13.0", "private": true, "type": "module", "scripts": { @@ -50,6 +50,8 @@ "@wangeditor/editor-for-vue": "5.1.10", "animate.css": "^4.1.1", "axios": "^1.7.2", + "codemirror": "^5", + "codemirror-editor-vue3": "^2.7.0", "color": "^4.2.3", "echarts": "^5.5.1", "element-plus": "^2.7.6", @@ -71,6 +73,7 @@ "@commitlint/cli": "^18.6.1", "@commitlint/config-conventional": "^18.6.3", "@iconify-json/ep": "^1.1.15", + "@types/codemirror": "^5.60.15", "@types/color": "^3.0.6", "@types/lodash": "^4.17.6", "@types/node": "^20.14.10", diff --git a/src/api/generator.ts b/src/api/generator.ts new file mode 100644 index 00000000..8620d15b --- /dev/null +++ b/src/api/generator.ts @@ -0,0 +1,143 @@ +import request from "@/utils/request"; +import { FormTypeEnum } from "@/enums/FormTypeEnum"; +import { QueryTypeEnum } from "@/enums/QueryTypeEnum"; + +const GENERATOR_BASE_URL = "/api/v1/generator"; + +class GeneratorAPI { + /** 获取数据表分页列表 */ + static getTablePage(params: TablePageQuery) { + return request>({ + url: `${GENERATOR_BASE_URL}/table/page`, + method: "get", + params: params, + }); + } + + /** 获取代码生成配置 */ + static getGenConfig(tableName: string) { + return request({ + url: `${GENERATOR_BASE_URL}/${tableName}/config`, + method: "get", + }); + } + + /** 获取代码生成配置 */ + static saveGenConfig(tableName: string, data: GenConfigForm) { + return request({ + url: `${GENERATOR_BASE_URL}/${tableName}/config`, + method: "post", + data: data, + }); + } + + /** 获取代码生成预览数据 */ + static getPreviewData(tableName: string) { + return request({ + url: `${GENERATOR_BASE_URL}/${tableName}/preview`, + method: "get", + }); + } +} + +export default GeneratorAPI; + +/** 代码生成预览对象 */ +export interface GeneratorPreviewVO { + /** 文件生成路径 */ + path: string; + /** 文件名称 */ + fileName: string; + /** 文件内容 */ + content: string; +} + +/** 数据表分页查询参数 */ +export interface TablePageQuery extends PageQuery { + /** 关键字(表名) */ + keywords?: string; +} + +/** 数据表分页对象 */ +export interface TablePageVO { + /** 表名称 */ + tableName: string; + + /** 表描述 */ + tableComment: string; + + /** 存储引擎 */ + engine: string; + + /** 字符集排序规则 */ + tableCollation: string; + + /** 创建时间 */ + createTime: string; +} + +/** 代码生成配置表单 */ +export interface GenConfigForm { + /** 主键 */ + id?: number; + + /** 表名 */ + tableName?: string; + + /** 业务名 */ + businessName?: string; + + /** 模块名 */ + moduleName?: string; + + /** 包名 */ + packageName?: string; + + /** 实体名 */ + entityName?: string; + + /** 作者 */ + author?: string; + + /** 字段配置列表 */ + fieldConfigs?: FieldConfig[]; +} + +/** 字段配置 */ +interface FieldConfig { + /** 主键 */ + id?: number; + + /** 列名 */ + columnName?: string; + + /** 列类型 */ + columnType?: string; + + /** 字段名 */ + fieldName?: string; + + /** 字段类型 */ + fieldType?: string; + + /** 字段描述 */ + fieldComment?: string; + + /** 是否在列表显示 */ + isShowInList?: number; + + /** 是否在表单显示 */ + isShowInForm?: number; + + /** 是否在查询条件显示 */ + isShowInQuery?: number; + + /** 是否必填 */ + isRequired?: number; + + /** 表单类型 */ + formType?: number; + + /** 查询类型 */ + queryType?: number; +} diff --git a/src/assets/icons/code.svg b/src/assets/icons/code.svg new file mode 100644 index 00000000..d8b546ca --- /dev/null +++ b/src/assets/icons/code.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/file.svg b/src/assets/icons/file.svg new file mode 100644 index 00000000..fac9bf01 --- /dev/null +++ b/src/assets/icons/file.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/java.svg b/src/assets/icons/java.svg new file mode 100644 index 00000000..eaa93dbe --- /dev/null +++ b/src/assets/icons/java.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/typescript.svg b/src/assets/icons/typescript.svg new file mode 100644 index 00000000..781d6f88 --- /dev/null +++ b/src/assets/icons/typescript.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/vue.svg b/src/assets/icons/vue.svg new file mode 100644 index 00000000..456f8768 --- /dev/null +++ b/src/assets/icons/vue.svg @@ -0,0 +1 @@ + diff --git a/src/assets/icons/xml.svg b/src/assets/icons/xml.svg new file mode 100644 index 00000000..f0412130 --- /dev/null +++ b/src/assets/icons/xml.svg @@ -0,0 +1 @@ + diff --git a/src/enums/FormTypeEnum.ts b/src/enums/FormTypeEnum.ts new file mode 100644 index 00000000..32cb9608 --- /dev/null +++ b/src/enums/FormTypeEnum.ts @@ -0,0 +1,14 @@ +/** + * 表单类型枚举 + */ +export const FormTypeEnum: Record = { + INPUT: { value: 1, label: "输入框" }, + SELECT: { value: 2, label: "下拉框" }, + RADIO: { value: 3, label: "单选框" }, + CHECK_BOX: { value: 4, label: "复选框" }, + INPUT_NUMBER: { value: 5, label: "数字输入框" }, + SWITCH: { value: 6, label: "开关" }, + TEXT_AREA: { value: 7, label: "文本域" }, + DATE_TIME: { value: 8, label: "日期时间框" }, + DATE: { value: 9, label: "日期框" }, +}; diff --git a/src/enums/MenuTypeEnum.ts b/src/enums/MenuTypeEnum.ts index b69942fd..b4571f4f 100644 --- a/src/enums/MenuTypeEnum.ts +++ b/src/enums/MenuTypeEnum.ts @@ -5,18 +5,18 @@ export const enum MenuTypeEnum { /** * 目录 */ - CATALOG = "CATALOG", + CATALOG, /** * 菜单 */ - MENU = "MENU", + MENU, /** * 按钮 */ - BUTTON = "BUTTON", + BUTTON, /** * 外链 */ - EXTLINK = "EXTLINK", + EXTLINK, } diff --git a/src/enums/QueryTypeEnum.ts b/src/enums/QueryTypeEnum.ts new file mode 100644 index 00000000..253efc0d --- /dev/null +++ b/src/enums/QueryTypeEnum.ts @@ -0,0 +1,37 @@ +/** + * 查询类型枚举 + */ +export const QueryTypeEnum: Record = { + /** 等于 */ + EQ: { value: 1, label: "=" }, + + /** 模糊匹配 */ + LIKE: { value: 2, label: "LIKE '%s%'" }, + + /** 包含 */ + IN: { value: 3, label: "IN" }, + + /** 范围 */ + BETWEEN: { value: 4, label: "BETWEEN" }, + + /** 大于 */ + GT: { value: 5, label: ">" }, + + /** 大于等于 */ + GE: { value: 6, label: ">=" }, + + /** 小于 */ + LT: { value: 7, label: "<" }, + + /** 小于等于 */ + LE: { value: 8, label: "<=" }, + + /** 不等于 */ + NE: { value: 9, label: "!=" }, + + /** 左模糊匹配 */ + LIKE_LEFT: { value: 10, label: "LIKE '%s'" }, + + /** 右模糊匹配 */ + LIKE_RIGHT: { value: 11, label: "LIKE 's%'" }, +}; diff --git a/src/main.ts b/src/main.ts index 16e0cb9f..ff813587 100644 --- a/src/main.ts +++ b/src/main.ts @@ -10,7 +10,10 @@ import "element-plus/theme-chalk/dark/css-vars.css"; import "@/styles/index.scss"; import "uno.css"; import "animate.css"; +import { InstallCodemirro } from "codemirror-editor-vue3"; const app = createApp(App); +// 注册插件 app.use(setupPlugins); +app.use(InstallCodemirro); app.mount("#app"); diff --git a/src/views/generator/index.vue b/src/views/generator/index.vue new file mode 100644 index 00000000..ae0ad75b --- /dev/null +++ b/src/views/generator/index.vue @@ -0,0 +1,599 @@ + + + diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index daec88ba..a468756e 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -12,25 +12,32 @@ - 搜索 - 重置 + + + 搜索 + + + + 重置 + - 分配权限 + + 分配权限 - 编辑 + + 编辑 - 删除 + + 删除 @@ -167,14 +177,16 @@
- {{ isExpanded ? "收缩" : "展开" }} + + + {{ isExpanded ? "收缩" : "展开" }} + 父子联动 + > + 父子联动 @@ -205,9 +217,9 @@ @@ -287,6 +299,7 @@ function handleQuery() { loading.value = false; }); } + /** 重置查询 */ function handleResetQuery() { queryFormRef.value.resetFields(); diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index ed42fd2d..e70856b0 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -207,7 +207,6 @@ append-to-body @close="handleCloseDialog" > -