diff --git a/README.md b/README.md index 5990dce14..428b4ffd0 100644 --- a/README.md +++ b/README.md @@ -189,16 +189,16 @@ ps:核心功能已经实现,正在对接微信小程序中... ### Vue3 前端 -| 框架 | 说明 | 版本 | -|----------------------------------------------------------------------|---------------------|--------| -| [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.37 | -| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.2 | -| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.9 | -| [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.7.4 | -| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.16 | -| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.1.10 | -| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架| 3.5.6 | -| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.1 | +| 框架 | 说明 | 版本 | +|----------------------------------------------------------------------|------------------|--------| +| [Vue](https://staging-cn.vuejs.org/) | Vue 框架 | 3.2.37 | +| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.3 | +| [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.9 | +| [TypeScript](https://www.typescriptlang.org/docs/) | TypeScript | 4.7.4 | +| [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.17 | +| [vue-i18n](https://kazupon.github.io/vue-i18n/zh/introduction.html/) | 国际化 | 9.1.10 | +| [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 | +| [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.1 | ## 🐷 演示图 diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java index d9ba7c4be..d387e2865 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/LambdaQueryWrapperX.java @@ -98,10 +98,10 @@ public class LambdaQueryWrapperX extends LambdaQueryWrapper { if (values!= null && values.length >0 && values[0] != null && values[1] != null) { return (LambdaQueryWrapperX) super.between(column, values[0], values[1]); } - if (values != null && values[0] != null) { + if (values != null && values.length >0 && values[0] != null) { return (LambdaQueryWrapperX) ge(column, values[0]); } - if (values != null && values[1] != null) { + if (values != null && values.length >0 && values[1] != null) { return (LambdaQueryWrapperX) le(column, values[2]); } return this; diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java index 1effb19ed..a44300833 100644 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java +++ b/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/query/QueryWrapperX.java @@ -95,13 +95,13 @@ public class QueryWrapperX extends QueryWrapper { } public QueryWrapperX betweenIfPresent(String column, Object[] values) { - if (values!= null && values[0] != null && values[1] != null) { + if (values!= null && values.length != 0 && values[0] != null && values[1] != null) { return (QueryWrapperX) super.between(column, values[0], values[1]); } - if (values!= null && values[0] != null) { + if (values!= null && values.length != 0 && values[0] != null) { return (QueryWrapperX) ge(column, values[0]); } - if (values!= null && values[1] != null) { + if (values!= null && values.length != 0 && values[1] != null) { return (QueryWrapperX) le(column, values[1]); } return this; diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java index f447472dd..cec246bfc 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/inner/CodegenEngine.java @@ -79,11 +79,20 @@ public class CodegenEngine { javaModuleImplTestFilePath("service/${table.businessName}/${table.className}ServiceImplTest")) // Java module-api Main .put(javaTemplatePath("enums/errorcode"), javaModuleApiMainFilePath("enums/ErrorCodeConstants_手动操作")) - // Vue + // Vue2 .put(vueTemplatePath("views/index.vue"), vueFilePath("views/${table.moduleName}/${classNameVar}/index.vue")) .put(vueTemplatePath("api/api.js"), vueFilePath("api/${table.moduleName}/${classNameVar}.js")) + // Vue3 + .put(vue3TemplatePath("views/index.vue"), + vue3FilePath("views/${table.moduleName}/${classNameVar}/index.vue")) + .put(vue3TemplatePath("views/data.ts"), + vue3FilePath("views/${table.moduleName}/${classNameVar}/${classNameVar}.data.ts")) + .put(vue3TemplatePath("api/api.ts"), + vue3FilePath("api/${table.moduleName}/${classNameVar}/index.ts")) + .put(vue3TemplatePath("api/types.ts"), + vue3FilePath("api/${table.moduleName}/${classNameVar}/types.ts")) // SQL .put("codegen/sql/sql.vm", "sql/sql.sql") .put("codegen/sql/h2.vm", "sql/h2.sql") @@ -228,5 +237,12 @@ public class CodegenEngine { return "yudao-ui-${sceneEnum.basePackage}/" + // 顶级目录 "src/" + path; } + private static String vue3TemplatePath(String path) { + return "codegen/vue3/" + path + ".vm"; + } + private static String vue3FilePath(String path) { + return "yudao-ui-${sceneEnum.basePackage}-vue3/" + // 顶级目录 + "src/" + path; + } } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm index 10ab97afc..afd583c28 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/exportReqVO.vm @@ -15,9 +15,6 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; #end ## 字段模板 #macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; #end @@ -27,12 +24,11 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; public class ${sceneEnum.prefixClass}${table.className}ExportReqVO { #foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 #if (${column.listOperation})##查询操作 #if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') + @ApiModelProperty(value = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; #else##情况二,非 Between 的时间 #columnTpl('', '') #end diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm index 5f5952c59..df2be7036 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/java/controller/vo/pageReqVO.vm @@ -15,9 +15,6 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; #end ## 字段模板 #macro(columnTpl $prefix $prefixStr) -#if (${column.javaType} == "Date")## 时间类型 - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) -#end @ApiModelProperty(value = "${prefixStr}${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) private ${column.javaType}#if ("$!prefix" != "") ${prefix}${JavaField}#else ${column.javaField}#end; #end @@ -29,12 +26,11 @@ import static ${DateUtilsClassName}.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; public class ${sceneEnum.prefixClass}${table.className}PageReqVO extends PageParam { #foreach ($column in $columns) -#set ($JavaField = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)})##首字母大写 #if (${column.listOperation})##查询操作 #if (${column.listOperationCondition} == "BETWEEN")## 情况一,Between 的时候 - #columnTpl('begin', '开始') - - #columnTpl('end', '结束') + @ApiModelProperty(value = "${column.columnComment}"#if ("$!column.example" != ""), example = "${column.example}"#end) + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private ${column.javaType}[] ${column.javaField}; #else##情况二,非 Between 的时间 #columnTpl('', '') #end diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm index d49fa93c5..95f7d66a2 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm @@ -219,22 +219,16 @@ export default { title: "", // 是否显示弹出层 open: false, - #foreach ($column in $columns)## 时间范围 - #if ($column.listOperation) - #if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") - #set ($AttrName = $column.javaField.substring(0,1).toUpperCase() + ${column.javaField.substring(1)}) - dateRange${AttrName}: [], - #end - #end - #end // 查询参数 queryParams: { pageNo: 1, pageSize: 10, #foreach ($column in $columns) - #if ($column.listOperation && $column.listOperationCondition != 'BETWEEN') + #if ($column.listOperation) + #if ($column.listOperationCondition != 'BETWEEN') $column.javaField: null, - #else if ($column.htmlType == "datetime" && $column.listOperationCondition == "BETWEEN") + #end + #if ($column.htmlType == "datetime" || $column.listOperationCondition == "BETWEEN") $column.javaField: [], #end #end diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm new file mode 100644 index 000000000..b37365a07 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/api.ts.vm @@ -0,0 +1,35 @@ +import { useAxios } from '@/hooks/web/useAxios' +import { ${simpleClassName}VO,${simpleClassName}PageReqVO,${simpleClassName}ExcelReqVO } from './types' + +const request = useAxios() + +#set ($baseURL = "/${table.moduleName}/${simpleClassName_strikeCase}") +// 查询${table.classComment}列表 +export const getPostPageApi = async (params: ${simpleClassName}PageReqVO) => { + return await request.get({ url: '${baseURL}/page', params }) +} + +// 查询${table.classComment}详情 +export const getPostApi = async (id: number) => { + return await request.get({ url: '${baseURL}/get?id=' + id }) +} + +// 新增${table.classComment} +export const createPostApi = async (data: ${simpleClassName}VO) => { + return await request.post({ url: '${baseURL}/create', data }) +} + +// 修改${table.classComment} +export const updatePostApi = async (data: ${simpleClassName}VO) => { + return await request.put({ url: '${baseURL}/update', data }) +} + +// 删除${table.classComment} +export const deletePostApi = async (id: number) => { + return await request.delete({ url: '${baseURL}/delete?id=' + id }) +} + +// 导出${table.classComment} Excel +export const exportPostApi = async (params: ${simpleClassName}ExcelReqVO) => { + return await request.download({ url: '${baseURL}/export-excel', params }) +} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/types.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/types.ts.vm new file mode 100644 index 000000000..d5b5d937d --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/api/types.ts.vm @@ -0,0 +1,35 @@ +export type ${simpleClassName}VO = { +#foreach ($column in $columns) +#if ($column.createOperation || $column.updateOperation) +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer") + ${column.javaField}: number +#else + ${column.javaField}: ${column.javaType.toLowerCase()} +#end +#end +#end +} + +export type ${simpleClassName}PageReqVO = { +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer") + ${column.javaField}: number +#else + ${column.javaField}: ${column.javaType.toLowerCase()} +#end +#end +#end +} + +export type ${simpleClassName}ExcelReqVO = { +#foreach ($column in $columns) +#if (${column.listOperation})##查询操作 +#if(${column.javaType.toLowerCase()} == "long" || ${column.javaType.toLowerCase()} == "integer") + ${column.javaField}: number +#else + ${column.javaField}: ${column.javaType.toLowerCase()} +#end +#end +#end +} \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/data.ts.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/data.ts.vm new file mode 100644 index 000000000..965fe49ab --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/data.ts.vm @@ -0,0 +1,111 @@ +import { reactive } from 'vue' +import { useI18n } from '@/hooks/web/useI18n' +import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' +import { DICT_TYPE } from '@/utils/dict' +const { t } = useI18n() // 国际化 +// 表单校验 +export const rules = reactive({ +#foreach ($column in $columns) +#if (($column.createOperation || $column.updateOperation) && !$column.nullable && !${column.primaryKey})## 创建或者更新操作 && 要求非空 && 非主键 +#set($comment=$column.columnComment) + $column.javaField: [{ required: true, message: "${comment}不能为空", trigger: #if($column.htmlType == "select")"change"#else"blur"#end }], +#end +#end +}) +// CrudSchema +const crudSchemas = reactive([ +#foreach($column in $columns) + #if ($column.listOperation || $column.listOperationResult || $column.createOperation || $column.updateOperation) + #set ($dictType = $column.dictType) + { + label: '${column.columnComment}', + field: '${column.javaField}', + #if ("" != $dictType)## 有数据字典 + dictType: DICT_TYPE.$dictType.toUpperCase(), + #end + #if($column.primaryKey) + type: 'index', + form: { + show: false + }, + detail: { + show: false + } + #else + #if (!$column.createOperation && !$column.updateOperation) + form: { + false + }, + #elseif(!("" != $column.dictType)) + form: { + show: true, + #if ($column.htmlType == "datetime")## 时间框 + component: 'DatePicker', + componentProps: { + type: 'datetime', + valueFormat: 'YYYY-MM-DD HH:mm:ss' + } + #elseif($column.htmlType == "editor")## 文本编辑器 + component: 'Editor', + colProps: { + span: 24 + }, + componentProps: { + valueHtml: '' + } + #elseif($column.htmlType == "textarea")## 文本框 + component: 'Input', + componentProps: { + type: 'textarea', + rows: 4 + }, + colProps: { + span: 24 + } + #end + }, + #end + #if ($column.listOperationResult) + search: { + #if($column.htmlType == "input") + show: true + #else + #if($column.htmlType == "datetime") + show: true, + component: 'DatePicker', + componentProps: { + type: 'datetimerange', + valueFormat: 'YYYY-MM-DD HH:mm:ss' + } + #elseif($column.htmlType == "select" || $column.htmlType == "radio") + #if ("" == $dictType)## 没有数据字典 + show: true, + component: 'Select', + componentProps: { + option: [{'','请选择字典生成'}] + } + #else + show: true + #end + #end + #end + } + #end + #end + }, + #end +#end + { + label: t('table.action'), + field: 'action', + width: '240px', + form: { + show: false + }, + detail: { + show: false + } + } +]) + +export const { allSchemas } = useCrudSchemas(crudSchemas) \ No newline at end of file diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm new file mode 100644 index 000000000..d02892265 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue3/views/index.vue.vm @@ -0,0 +1,214 @@ + + + diff --git a/yudao-ui-admin-vue3/package.json b/yudao-ui-admin-vue3/package.json index 2a955d79d..933a2db3a 100644 --- a/yudao-ui-admin-vue3/package.json +++ b/yudao-ui-admin-vue3/package.json @@ -41,7 +41,7 @@ "lodash-es": "^4.17.21", "mitt": "^3.0.0", "nprogress": "^0.2.0", - "pinia": "^2.0.16", + "pinia": "^2.0.17", "pinia-plugin-persist": "^1.0.0", "qrcode": "^1.5.1", "qs": "^6.11.0", @@ -56,12 +56,12 @@ "devDependencies": { "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.3", - "@iconify/json": "^2.1.81", + "@iconify/json": "^2.1.82", "@intlify/vite-plugin-vue-i18n": "^5.0.1", "@purge-icons/generated": "^0.8.1", "@types/intro.js": "^5.1.0", "@types/lodash-es": "^4.17.6", - "@types/node": "^18.6.0", + "@types/node": "^18.6.1", "@types/nprogress": "^0.2.0", "@types/qrcode": "^1.4.2", "@types/qs": "^6.9.7", @@ -74,7 +74,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-define-config": "^1.5.1", "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-vue": "^9.2.0", + "eslint-plugin-vue": "^9.3.0", "less": "^4.1.3", "lint-staged": "^13.0.3", "plop": "^3.1.1", @@ -92,7 +92,7 @@ "stylelint-order": "^5.0.0", "typescript": "4.7.4", "unplugin-vue-define-options": "^0.6.2", - "vite": "3.0.2", + "vite": "3.0.3", "vite-plugin-compression": "^0.5.1", "vite-plugin-eslint": "^1.7.0", "vite-plugin-html": "^3.2.0", diff --git a/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts index 544118e4d..9f3614f5a 100644 --- a/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/apiAccessLog/index.ts @@ -9,5 +9,5 @@ export const getApiAccessLogPageApi = (params) => { // 导出API 访问日志 export const exportApiAccessLogApi = (params) => { - return request.get({ url: '/infra/api-access-log/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/infra/api-access-log/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts index 1bf019691..e8209b2b4 100644 --- a/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/apiErrorLog/index.ts @@ -16,5 +16,8 @@ export const updateApiErrorLogPageApi = (id: number, processStatus: number) => { // 导出API 访问日志 export const exportApiErrorLogApi = (params) => { - return request.get({ url: '/infra/api-error-log/export-excel', params, responseType: 'blob' }) + return request.download({ + url: '/infra/api-error-log/export-excel', + params + }) } diff --git a/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts b/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts index 12fc05365..dbce9518b 100644 --- a/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/codegen/index.ts @@ -40,7 +40,7 @@ export const previewCodegenApi = (id: number) => { // 下载生成代码 export const downloadCodegenApi = (id: number) => { - return request.get({ url: '/infra/codegen/download?tableId=' + id, responseType: 'blob' }) + return request.download({ url: '/infra/codegen/download?tableId=' + id }) } // 获得表定义 diff --git a/yudao-ui-admin-vue3/src/api/infra/config/index.ts b/yudao-ui-admin-vue3/src/api/infra/config/index.ts index 2628e1aba..d3c042a57 100644 --- a/yudao-ui-admin-vue3/src/api/infra/config/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/config/index.ts @@ -35,5 +35,5 @@ export const deleteConfigApi = (id: number) => { // 导出参数 export const exportConfigApi = (params) => { - return request.get({ url: '/infra/config/export', params, responseType: 'blob' }) + return request.download({ url: '/infra/config/export', params }) } diff --git a/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts b/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts index 0942e3b2e..2fd771635 100644 --- a/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/dbDoc/index.ts @@ -4,15 +4,15 @@ const request = useAxios() // 导出Html export const exportHtmlApi = () => { - return request.get({ url: '/infra/db-doc/export-html', responseType: 'blob' }) + return request.download({ url: '/infra/db-doc/export-html' }) } // 导出Word export const exportWordApi = () => { - return request.get({ url: '/infra/db-doc/export-word', responseType: 'blob' }) + return request.download({ url: '/infra/db-doc/export-word' }) } // 导出Markdown export const exportMarkdownApi = () => { - return request.get({ url: '/infra/db-doc/export-markdown', responseType: 'blob' }) + return request.download({ url: '/infra/db-doc/export-markdown' }) } diff --git a/yudao-ui-admin-vue3/src/api/infra/job/index.ts b/yudao-ui-admin-vue3/src/api/infra/job/index.ts index 5739c788a..bf1193194 100644 --- a/yudao-ui-admin-vue3/src/api/infra/job/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/job/index.ts @@ -30,7 +30,7 @@ export const deleteJobApi = (id: number) => { // 导出定时任务调度 export const exportJobApi = (params) => { - return request.get({ url: '/infra/job/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/infra/job/export-excel', params }) } // 任务状态修改 diff --git a/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts b/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts index 50ff327d1..a82724ddf 100644 --- a/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/infra/jobLog/index.ts @@ -14,9 +14,8 @@ export const getJobLogApi = (id: number) => { // 导出定时任务日志 export const exportJobLogApi = (params) => { - return request.get({ + return request.download({ url: '/infra/job-log/export-excel', - params, - responseType: 'blob' + params }) } diff --git a/yudao-ui-admin-vue3/src/api/pay/app/index.ts b/yudao-ui-admin-vue3/src/api/pay/app/index.ts index 1a8cef698..19885e3a6 100644 --- a/yudao-ui-admin-vue3/src/api/pay/app/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/app/index.ts @@ -39,7 +39,7 @@ export const deleteAppApi = (id: number) => { // 导出支付应用 export const exportAppApi = (params) => { - return request.get({ url: '/pay/app/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/pay/app/export-excel', params }) } // 根据商ID称搜索应用列表 diff --git a/yudao-ui-admin-vue3/src/api/pay/channel/index.ts b/yudao-ui-admin-vue3/src/api/pay/channel/index.ts index e7e875df3..05fdddb30 100644 --- a/yudao-ui-admin-vue3/src/api/pay/channel/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/channel/index.ts @@ -35,5 +35,5 @@ export const deleteChannelApi = (id: number) => { // 导出支付渠道 export const exportChannelApi = (params) => { - return request.get({ url: '/pay/channel/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/pay/channel/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts b/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts index 679ed8815..d6aba8dd2 100644 --- a/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/merchant/index.ts @@ -40,7 +40,7 @@ export const deleteMerchantApi = (id: number) => { // 导出支付商户 export const exportMerchantApi = (params) => { - return request.get({ url: '/pay/merchant/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/pay/merchant/export-excel', params }) } // 支付商户状态修改 export const changeMerchantStatusApi = (id: number, status: number) => { diff --git a/yudao-ui-admin-vue3/src/api/pay/order/index.ts b/yudao-ui-admin-vue3/src/api/pay/order/index.ts index 62bf63e8f..662b2ebee 100644 --- a/yudao-ui-admin-vue3/src/api/pay/order/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/order/index.ts @@ -30,5 +30,5 @@ export const deleteOrderApi = async (id: number) => { // 导出支付订单 export const exportOrderApi = async (params) => { - return await request.get({ url: '/pay/order/export-excel', params, responseType: 'blob' }) + return await request.download({ url: '/pay/order/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/pay/refund/index.ts b/yudao-ui-admin-vue3/src/api/pay/refund/index.ts index 56da12236..55185b7e0 100644 --- a/yudao-ui-admin-vue3/src/api/pay/refund/index.ts +++ b/yudao-ui-admin-vue3/src/api/pay/refund/index.ts @@ -30,5 +30,5 @@ export const deleteRefundApi = (id: number) => { // 导出退款订单 export const exportRefundApi = (params) => { - return request.get({ url: '/pay/refund/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/pay/refund/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts b/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts index e3e7be3e7..fe3f128cc 100644 --- a/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/errorCode/index.ts @@ -29,5 +29,5 @@ export const deleteErrorCodeApi = (id: number) => { } // 导出错误码 export const excelErrorCodeApi = (params) => { - return request.get({ url: '/system/error-code/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/system/error-code/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts b/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts index 1a746805f..f117439f9 100644 --- a/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/loginLog/index.ts @@ -8,5 +8,5 @@ export const getLoginLogPageApi = (params) => { } // 导出登录日志 export const exportLoginLogApi = (params) => { - return request.get({ url: '/system/login-log/export', params, responseType: 'blob' }) + return request.download({ url: '/system/login-log/export', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts b/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts index ac95fb027..aa55e1a85 100644 --- a/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/operatelog/index.ts @@ -8,5 +8,5 @@ export const getOperateLogPageApi = (params) => { } // 导出操作日志 export const exportOperateLogApi = (params) => { - return request.get({ url: '/system/operate-log/export', params, responseType: 'blob' }) + return request.download({ url: '/system/operate-log/export', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/post/index.ts b/yudao-ui-admin-vue3/src/api/system/post/index.ts index feb9389b2..40eb9705a 100644 --- a/yudao-ui-admin-vue3/src/api/system/post/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/post/index.ts @@ -34,5 +34,5 @@ export const deletePostApi = async (id: number) => { // 导出岗位 export const exportPostApi = async (params) => { - return await request.get({ url: '/system/post/export', params, responseType: 'blob' }) + return await request.download({ url: '/system/post/export', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts b/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts index 513b3982e..af2e832b8 100644 --- a/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sensitiveWord/index.ts @@ -30,7 +30,7 @@ export const deleteSensitiveWordApi = (id: number) => { // 导出敏感词 export const exportSensitiveWordApi = (params) => { - return request.get({ url: '/system/sensitive-word/export', params, responseType: 'blob' }) + return request.download({ url: '/system/sensitive-word/export-excel', params }) } // 获取所有敏感词的标签数组 diff --git a/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts b/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts index 4d110fc6d..92401fa01 100644 --- a/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sms/smsLog/index.ts @@ -9,5 +9,5 @@ export const getSmsLogPageApi = (params) => { // 导出短信日志 export const exportSmsLogApi = (params) => { - return request.get({ url: '/system/sms-log/export', params, responseType: 'blob' }) + return request.download({ url: '/system/sms-log/export', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts b/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts index 26cc883c0..cfc9b4c08 100644 --- a/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/sms/smsTemplate/index.ts @@ -35,5 +35,8 @@ export const sendSmsApi = (data) => { // 导出短信模板 export const exportPostApi = (params) => { - return request.get({ url: '/system/sms-template/export-excel', params, responseType: 'blob' }) + return request.download({ + url: '/system/sms-template/export-excel', + params + }) } diff --git a/yudao-ui-admin-vue3/src/api/system/tenant/index.ts b/yudao-ui-admin-vue3/src/api/system/tenant/index.ts index 98b25b6e2..851ac11d1 100644 --- a/yudao-ui-admin-vue3/src/api/system/tenant/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/tenant/index.ts @@ -30,5 +30,5 @@ export const deleteTenantApi = (id: number) => { // 导出租户 export const exportTenantApi = (params) => { - return request.get({ url: '/system/tenant/export-excel', params, responseType: 'blob' }) + return request.download({ url: '/system/tenant/export-excel', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/user/index.ts b/yudao-ui-admin-vue3/src/api/system/user/index.ts index b556fd830..f4a484eaf 100644 --- a/yudao-ui-admin-vue3/src/api/system/user/index.ts +++ b/yudao-ui-admin-vue3/src/api/system/user/index.ts @@ -30,12 +30,12 @@ export const deleteUserApi = (id: number) => { // 导出用户 export const exportUserApi = (params) => { - return request.get({ url: '/system/user/export', params, responseType: 'blob' }) + return request.download({ url: '/system/user/export', params }) } // 下载用户导入模板 export const importUserTemplateApi = () => { - return request.get({ url: '/system/user/get-import-template', responseType: 'blob' }) + return request.download({ url: '/system/user/get-import-template' }) } // 用户密码重置 diff --git a/yudao-ui-admin-vue3/src/config/axios/index.ts b/yudao-ui-admin-vue3/src/config/axios/index.ts index fe4b2a95a..95023c4e4 100644 --- a/yudao-ui-admin-vue3/src/config/axios/index.ts +++ b/yudao-ui-admin-vue3/src/config/axios/index.ts @@ -29,7 +29,8 @@ export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] // 创建axios实例 const service: AxiosInstance = axios.create({ baseURL: BASE_URL + BASE_API, // api 的 base_url - timeout: config.request_timeout // 请求超时时间 + timeout: config.request_timeout, // 请求超时时间 + withCredentials: false // 禁用 Cookie 等信息 }) // request拦截器 diff --git a/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts b/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts index bca77b85b..f8aacd087 100644 --- a/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts +++ b/yudao-ui-admin-vue3/src/hooks/web/useAxios.ts @@ -37,12 +37,17 @@ async function putFn(option: AxiosConfig): Promise { const res = await request({ method: 'PUT', ...option }) return res.data } +async function downloadFn(option: AxiosConfig): Promise { + const res = await request({ method: 'GET', responseType: 'blob', ...option }) + return res as unknown as Promise +} export const useAxios = () => { return { get: getFn, post: postFn, delete: deleteFn, - put: putFn + put: putFn, + download: downloadFn } } diff --git a/yudao-ui-admin-vue3/src/router/modules/remaining.ts b/yudao-ui-admin-vue3/src/router/modules/remaining.ts index 92f3a367e..7c3c524e6 100644 --- a/yudao-ui-admin-vue3/src/router/modules/remaining.ts +++ b/yudao-ui-admin-vue3/src/router/modules/remaining.ts @@ -72,7 +72,7 @@ const remainingRouter: AppRouteRecordRaw[] = [ children: [ { path: 'edit', - component: () => import('@/views/infra/codegen/EditTable.vue'), + component: () => import('@/views/infra/codegen/components/EditTable.vue'), name: 'EditTable', meta: { noCache: true, diff --git a/yudao-ui-admin-vue3/src/utils/download.ts b/yudao-ui-admin-vue3/src/utils/download.ts index 12c01fea1..ab2001494 100644 --- a/yudao-ui-admin-vue3/src/utils/download.ts +++ b/yudao-ui-admin-vue3/src/utils/download.ts @@ -1,4 +1,4 @@ -const download0 = (data: any, fileName: string, mineType: string) => { +const download0 = (data: Blob, fileName: string, mineType: string) => { // 创建 blob const blob = new Blob([data], { type: mineType }) // 创建 href 超链接,点击进行下载 @@ -14,23 +14,23 @@ const download0 = (data: any, fileName: string, mineType: string) => { const download = { // 下载 Excel 方法 - excel: (data: any, fileName: string) => { + excel: (data: Blob, fileName: string) => { download0(data, fileName, 'application/vnd.ms-excel') }, // 下载 Word 方法 - word: (data: any, fileName: string) => { + word: (data: Blob, fileName: string) => { download0(data, fileName, 'application/msword') }, // 下载 Zip 方法 - zip: (data: any, fileName: string) => { + zip: (data: Blob, fileName: string) => { download0(data, fileName, 'application/zip') }, // 下载 Html 方法 - html: (data: any, fileName: string) => { + html: (data: Blob, fileName: string) => { download0(data, fileName, 'text/html') }, // 下载 Markdown 方法 - markdown: (data: any, fileName: string) => { + markdown: (data: Blob, fileName: string) => { download0(data, fileName, 'text/markdown') } } diff --git a/yudao-ui-admin-vue3/src/views/infra/codegen/EditTable.vue b/yudao-ui-admin-vue3/src/views/infra/codegen/components/EditTable.vue similarity index 92% rename from yudao-ui-admin-vue3/src/views/infra/codegen/EditTable.vue rename to yudao-ui-admin-vue3/src/views/infra/codegen/components/EditTable.vue index 07dfa5221..47e2c89e6 100644 --- a/yudao-ui-admin-vue3/src/views/infra/codegen/EditTable.vue +++ b/yudao-ui-admin-vue3/src/views/infra/codegen/components/EditTable.vue @@ -1,9 +1,9 @@