فهرست منبع

新增上文件管理界面,实现查询和上传文件
修改api.ejs模板,添加接口文件名后缀Api
优化所有接口引用
权限管理优化菜单路由地址为绝对路径,权限点选择接口没有默认赋值的问题

zhontai 2 سال پیش
والد
کامیت
84b2486e6c
58فایلهای تغییر یافته به همراه382 افزوده شده و 76 حذف شده
  1. 1 1
      gen/templates/api.ejs
  2. 2 2
      src/api/admin.extend/Api.ts
  3. 1 1
      src/api/admin/Api.ts
  4. 1 1
      src/api/admin/Auth.ts
  5. 1 1
      src/api/admin/Cache.ts
  6. 1 1
      src/api/admin/Dictionary.ts
  7. 1 1
      src/api/admin/DictionaryType.ts
  8. 1 1
      src/api/admin/Document.ts
  9. 66 2
      src/api/admin/File.ts
  10. 1 1
      src/api/admin/LoginLog.ts
  11. 1 1
      src/api/admin/OprationLog.ts
  12. 1 1
      src/api/admin/Org.ts
  13. 1 1
      src/api/admin/Permission.ts
  14. 1 1
      src/api/admin/Role.ts
  15. 1 1
      src/api/admin/Task.ts
  16. 1 1
      src/api/admin/TaskLog.ts
  17. 1 1
      src/api/admin/Tenant.ts
  18. 1 1
      src/api/admin/User.ts
  19. 1 1
      src/api/admin/View.ts
  20. 105 0
      src/api/admin/data-contracts.ts
  21. 1 1
      src/router/backEnd.ts
  22. 1 1
      src/stores/userInfo.ts
  23. 1 0
      src/types/mitt.d.ts
  24. 1 1
      src/views/admin/api/components/api-form.vue
  25. 3 2
      src/views/admin/api/index.vue
  26. 1 1
      src/views/admin/cache/index.vue
  27. 1 1
      src/views/admin/dictionary/components/dictionary-form.vue
  28. 1 1
      src/views/admin/dictionary/components/dictionary-type-form.vue
  29. 1 1
      src/views/admin/dictionary/dictionary-type.vue
  30. 1 1
      src/views/admin/dictionary/dictionary.vue
  31. 95 0
      src/views/admin/file/components/file-upload.vue
  32. 32 5
      src/views/admin/file/index.vue
  33. 1 1
      src/views/admin/login/component/account.vue
  34. 1 1
      src/views/admin/logs/login-log.vue
  35. 1 1
      src/views/admin/logs/opration-log.vue
  36. 1 1
      src/views/admin/org/components/org-form.vue
  37. 1 1
      src/views/admin/org/components/org-menu.vue
  38. 1 1
      src/views/admin/org/index.vue
  39. 15 2
      src/views/admin/permission/components/permission-dot-form.vue
  40. 2 2
      src/views/admin/permission/components/permission-group-form.vue
  41. 3 3
      src/views/admin/permission/components/permission-menu-form.vue
  42. 3 3
      src/views/admin/permission/index.vue
  43. 1 1
      src/views/admin/personal/components/change-password-form.vue
  44. 1 1
      src/views/admin/personal/index.vue
  45. 1 1
      src/views/admin/role/components/role-form.vue
  46. 1 1
      src/views/admin/role/components/set-role-data-scope.vue
  47. 1 1
      src/views/admin/role/components/set-role-menu.vue
  48. 1 1
      src/views/admin/role/index.vue
  49. 1 1
      src/views/admin/task/components/task-logs.vue
  50. 1 1
      src/views/admin/task/index.vue
  51. 1 1
      src/views/admin/tenant/components/set-tenant-menu.vue
  52. 1 1
      src/views/admin/tenant/components/tenant-form.vue
  53. 1 1
      src/views/admin/tenant/index.vue
  54. 4 4
      src/views/admin/user/components/user-form.vue
  55. 1 1
      src/views/admin/user/components/user-select.vue
  56. 1 1
      src/views/admin/user/index.vue
  57. 4 4
      src/views/admin/view/components/view-form.vue
  58. 3 3
      src/views/admin/view/index.vue

+ 1 - 1
gen/templates/api.ejs

@@ -13,7 +13,7 @@ import { HttpClient, RequestParams, ContentType, HttpResponse } from "./<%~ conf
 import { <%~ dataContracts.join(", ") %> } from "./<%~ config.fileNames.dataContracts %>"
 <% } %>
 
-export class <%= apiClassName %><SecurityDataType = unknown><% if (!config.singleHttpClient) { %> extends HttpClient<SecurityDataType> <% } %> {
+export class <%= apiClassName %>Api<SecurityDataType = unknown><% if (!config.singleHttpClient) { %> extends HttpClient<SecurityDataType> <% } %> {
 <% if(config.singleHttpClient) { %>
   http: HttpClient<SecurityDataType>;
 

+ 2 - 2
src/api/admin/Api.extend.ts → src/api/admin.extend/Api.ts

@@ -10,9 +10,9 @@
  */
 
 import { AxiosResponse } from 'axios'
-import { HttpClient, RequestParams } from './http-client'
+import { HttpClient, RequestParams } from '../admin/http-client'
 
-export class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class ApiApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Api.ts

@@ -22,7 +22,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class ApiApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Auth.ts

@@ -19,7 +19,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Auth<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class AuthApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Cache.ts

@@ -13,7 +13,7 @@ import { AxiosResponse } from 'axios'
 import { ResultOutputListObject } from './data-contracts'
 import { HttpClient, RequestParams } from './http-client'
 
-export class Cache<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class CacheApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Dictionary.ts

@@ -20,7 +20,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Dictionary<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class DictionaryApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/DictionaryType.ts

@@ -20,7 +20,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class DictionaryType<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class DictionaryTypeApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Document.ts

@@ -28,7 +28,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Document<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class DocumentApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 66 - 2
src/api/admin/File.ts

@@ -9,10 +9,15 @@
  * ---------------------------------------------------------------
  */
 
-import { PageInputFileGetPageDto, ResultOutputPageOutputFileGetPageOutput } from './data-contracts'
+import {
+  PageInputFileGetPageDto,
+  ResultOutputFileEntity,
+  ResultOutputListFileEntity,
+  ResultOutputPageOutputFileGetPageOutput,
+} from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class File<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class FileApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *
@@ -32,4 +37,63 @@ export class File<SecurityDataType = unknown> extends HttpClient<SecurityDataTyp
       format: 'json',
       ...params,
     })
+  /**
+   * No description
+   *
+   * @tags file
+   * @name UploadFile
+   * @summary 上传文件
+   * @request POST:/api/admin/file/upload-file
+   * @secure
+   */
+  uploadFile = (
+    data: {
+      /** @format binary */
+      file: File
+    },
+    query?: {
+      /** @default "" */
+      fileDirectory?: string
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<ResultOutputFileEntity, any>({
+      path: `/api/admin/file/upload-file`,
+      method: 'POST',
+      query: query,
+      body: data,
+      secure: true,
+      type: ContentType.FormData,
+      format: 'json',
+      ...params,
+    })
+  /**
+   * No description
+   *
+   * @tags file
+   * @name UploadFiles
+   * @summary 上传多文件
+   * @request POST:/api/admin/file/upload-files
+   * @secure
+   */
+  uploadFiles = (
+    data: {
+      files: File[]
+    },
+    query?: {
+      /** @default "" */
+      fileDirectory?: string
+    },
+    params: RequestParams = {}
+  ) =>
+    this.request<ResultOutputListFileEntity, any>({
+      path: `/api/admin/file/upload-files`,
+      method: 'POST',
+      query: query,
+      body: data,
+      secure: true,
+      type: ContentType.FormData,
+      format: 'json',
+      ...params,
+    })
 }

+ 1 - 1
src/api/admin/LoginLog.ts

@@ -12,7 +12,7 @@
 import { LoginLogAddInput, PageInputLogGetPageDto, ResultOutputInt64, ResultOutputPageOutputLoginLogListOutput } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class LoginLog<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class LoginLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/OprationLog.ts

@@ -12,7 +12,7 @@
 import { OprationLogAddInput, PageInputLogGetPageDto, ResultOutputInt64, ResultOutputPageOutputOprationLogListOutput } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class OprationLog<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class OprationLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Org.ts

@@ -13,7 +13,7 @@ import { AxiosResponse } from 'axios'
 import { OrgAddInput, OrgUpdateInput, ResultOutputInt64, ResultOutputListOrgListOutput, ResultOutputOrgGetOutput } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Org<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class OrgApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Permission.ts

@@ -32,7 +32,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Permission<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class PermissionApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Role.ts

@@ -24,7 +24,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Role<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class RoleApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Task.ts

@@ -20,7 +20,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Task<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class TaskApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/TaskLog.ts

@@ -12,7 +12,7 @@
 import { PageInputTaskLogGetPageDto, ResultOutputPageOutputTaskLog } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class TaskLog<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class TaskLogApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/Tenant.ts

@@ -20,7 +20,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class Tenant<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class TenantApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/User.ts

@@ -29,7 +29,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class User<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class UserApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 1 - 1
src/api/admin/View.ts

@@ -20,7 +20,7 @@ import {
 } from './data-contracts'
 import { ContentType, HttpClient, RequestParams } from './http-client'
 
-export class View<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
+export class ViewApi<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
   /**
    * No description
    *

+ 105 - 0
src/api/admin/data-contracts.ts

@@ -666,6 +666,73 @@ export type DynamicFilterLogic = 0 | 1
  */
 export type DynamicFilterOperator = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18
 
+/** 文件 */
+export interface FileEntity {
+  /**
+   * 主键Id
+   * @format int64
+   */
+  id?: number
+  /**
+   * 创建者Id
+   * @format int64
+   */
+  createdUserId?: number | null
+  /**
+   * 创建者
+   * @maxLength 50
+   */
+  createdUserName?: string | null
+  /**
+   * 创建时间
+   * @format date-time
+   */
+  createdTime?: string | null
+  /**
+   * 修改者Id
+   * @format int64
+   */
+  modifiedUserId?: number | null
+  /**
+   * 修改者
+   * @maxLength 50
+   */
+  modifiedUserName?: string | null
+  /**
+   * 修改时间
+   * @format date-time
+   */
+  modifiedTime?: string | null
+  /** 是否删除 */
+  isDeleted?: boolean
+  /** Invalid=0,Minio=1,Aliyun=2,QCloud=3,Qiniu=4,HuaweiCloud=5 */
+  provider?: OSSProvider
+  /** 存储桶名称 */
+  bucketName?: string | null
+  /** 文件目录 */
+  fileDirectory?: string | null
+  /**
+   * 文件Guid
+   * @format uuid
+   */
+  fileGuid?: string
+  /** 文件名 */
+  fileName?: string | null
+  /** 文件扩展名 */
+  extension?: string | null
+  /**
+   * 文件字节长度
+   * @format int64
+   */
+  size?: number
+  /** 文件大小格式化 */
+  sizeFormat?: string | null
+  /** 链接地址 */
+  linkUrl?: string | null
+  /** md5码,防止上传重复文件 */
+  md5?: string | null
+}
+
 export interface FileGetPageDto {
   /** 文件名 */
   fileName?: string | null
@@ -689,6 +756,20 @@ export interface FileGetPageOutput {
   sizeFormat?: string | null
   /** 链接地址 */
   linkUrl?: string | null
+  /** 创建者 */
+  createdUserName?: string | null
+  /**
+   * 创建时间
+   * @format date-time
+   */
+  createdTime?: string | null
+  /** 修改者 */
+  modifiedUserName?: string | null
+  /**
+   * 修改时间
+   * @format date-time
+   */
+  modifiedTime?: string | null
 }
 
 export interface LogGetPageDto {
@@ -2014,6 +2095,18 @@ export interface ResultOutputDocumentGetMenuOutput {
   data?: DocumentGetMenuOutput
 }
 
+/** 结果输出 */
+export interface ResultOutputFileEntity {
+  /** 是否成功标记 */
+  success?: boolean
+  /** 编码 */
+  code?: string | null
+  /** 消息 */
+  msg?: string | null
+  /** 文件 */
+  data?: FileEntity
+}
+
 /** 结果输出 */
 export interface ResultOutputIEnumerableObject {
   /** 是否成功标记 */
@@ -2077,6 +2170,18 @@ export interface ResultOutputListDocumentListOutput {
   data?: DocumentListOutput[] | null
 }
 
+/** 结果输出 */
+export interface ResultOutputListFileEntity {
+  /** 是否成功标记 */
+  success?: boolean
+  /** 编码 */
+  code?: string | null
+  /** 消息 */
+  msg?: string | null
+  /** 数据 */
+  data?: FileEntity[] | null
+}
+
 /** 结果输出 */
 export interface ResultOutputListInt64 {
   /** 是否成功标记 */

+ 1 - 1
src/router/backEnd.ts

@@ -10,7 +10,7 @@ import { formatTwoStageRoutes, formatFlatteningRoutes, router } from '/@/router/
 import { useRoutesList } from '/@/stores/routesList'
 import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'
 // import { useMenuApi } from '/@/api/menu/index'
-import { Auth as AuthApi } from '/@/api/admin/Auth'
+import { AuthApi } from '/@/api/admin/Auth'
 import { listToTree } from '/@/utils/tree'
 
 // 后端控制路由

+ 1 - 1
src/stores/userInfo.ts

@@ -1,7 +1,7 @@
 import { defineStore } from 'pinia'
 //import Cookies from 'js-cookie'
 import { Session } from '/@/utils/storage'
-import { Auth as AuthApi } from '/@/api/admin/Auth'
+import { AuthApi } from '/@/api/admin/Auth'
 import { clearToken } from '/@/api/admin/http-client'
 
 /**

+ 1 - 0
src/types/mitt.d.ts

@@ -43,6 +43,7 @@ declare type MittType<T = any> = {
   refreshTenant?: T
   refreshUser?: T
   refreshView?: T
+  refreshFile?: T
 }
 
 // mitt 参数类型定义

+ 1 - 1
src/views/admin/api/components/api-form.vue

@@ -64,7 +64,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, ref, PropType } from 'vue'
 import { ApiListOutput, ApiUpdateInput } from '/@/api/admin/data-contracts'
-import { Api as ApiApi } from '/@/api/admin/Api'
+import { ApiApi } from '/@/api/admin/Api'
 import eventBus from '/@/utils/mitt'
 
 defineProps({

+ 3 - 2
src/views/admin/api/index.vue

@@ -56,8 +56,8 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { ApiListOutput } from '/@/api/admin/data-contracts'
-import { Api as ApiApi } from '/@/api/admin/Api'
-import { Api as ApiExtApi } from '/@/api/admin/Api.extend'
+import { ApiApi } from '/@/api/admin/Api'
+import { ApiApi as ApiExtApi } from '/@/api/admin.extend/Api'
 import { listToTree } from '/@/utils/tree'
 import { cloneDeep, isArray } from 'lodash-es'
 import eventBus from '/@/utils/mitt'
@@ -175,6 +175,7 @@ const onSync = async () => {
         state.syncLoading = false
         if (resSyncApi?.success) {
           proxy.$modal.msgSuccess('同步成功')
+          onQuery()
         } else {
           proxy.$modal.msgError('同步失败')
         }

+ 1 - 1
src/views/admin/cache/index.vue

@@ -18,7 +18,7 @@
 
 <script lang="ts" setup>
 import { reactive, onMounted, getCurrentInstance } from 'vue'
-import { Cache as CacheApi } from '/@/api/admin/Cache'
+import { CacheApi } from '/@/api/admin/Cache'
 const { proxy } = getCurrentInstance() as any
 
 defineProps({

+ 1 - 1
src/views/admin/dictionary/components/dictionary-form.vue

@@ -38,7 +38,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref } from 'vue'
 import { DictionaryAddInput, DictionaryUpdateInput } from '/@/api/admin/data-contracts'
-import { Dictionary as DictionaryApi } from '/@/api/admin/Dictionary'
+import { DictionaryApi } from '/@/api/admin/Dictionary'
 import eventBus from '/@/utils/mitt'
 
 defineProps({

+ 1 - 1
src/views/admin/dictionary/components/dictionary-type-form.vue

@@ -38,7 +38,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref } from 'vue'
 import { DictionaryTypeAddInput, DictionaryTypeUpdateInput } from '/@/api/admin/data-contracts'
-import { DictionaryType as DictionaryTypeApi } from '/@/api/admin/DictionaryType'
+import { DictionaryTypeApi } from '/@/api/admin/DictionaryType'
 import eventBus from '/@/utils/mitt'
 
 defineProps({

+ 1 - 1
src/views/admin/dictionary/dictionary-type.vue

@@ -59,7 +59,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, nextTick, defineAsyncComponent } from 'vue'
 import { DictionaryTypeListOutput, PageInputDictionaryTypeGetPageDto } from '/@/api/admin/data-contracts'
-import { DictionaryType as DictionaryTypeApi } from '/@/api/admin/DictionaryType'
+import { DictionaryTypeApi } from '/@/api/admin/DictionaryType'
 import eventBus from '/@/utils/mitt'
 
 // 引入组件

+ 1 - 1
src/views/admin/dictionary/dictionary.vue

@@ -52,7 +52,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { DictionaryListOutput, PageInputDictionaryGetPageDto, DictionaryTypeListOutput } from '/@/api/admin/data-contracts'
-import { Dictionary as DictionaryApi } from '/@/api/admin/Dictionary'
+import { DictionaryApi } from '/@/api/admin/Dictionary'
 import eventBus from '/@/utils/mitt'
 
 // 引入组件

+ 95 - 0
src/views/admin/file/components/file-upload.vue

@@ -0,0 +1,95 @@
+<template>
+  <div>
+    <el-dialog v-model="state.showDialog" destroy-on-close :title="title" draggable width="600px">
+      <div>
+        <el-upload
+          ref="uploadRef"
+          :action="uploadAction"
+          :headers="uploadHeaders"
+          :data="{ fileDirectory: '' }"
+          drag
+          multiple
+          :auto-upload="false"
+          :on-success="onSuccess"
+        >
+          <el-icon class="el-icon--upload"><ele-UploadFilled /></el-icon>
+          <div class="el-upload__text">拖拽上传或<em>点击上传</em></div>
+          <!-- <template #tip>
+            <div class="el-upload__tip"></div>
+          </template> -->
+        </el-upload>
+      </div>
+      <template #footer>
+        <span class="dialog-footer">
+          <el-button @click="onCancel" size="default">取 消</el-button>
+          <el-button type="primary" @click="onSure" size="default" :loading="state.sureLoading">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts" setup>
+import { ref, reactive, computed } from 'vue'
+import { UploadFile, UploadFiles } from 'element-plus'
+import { getToken } from '/@/api/admin/http-client'
+import type { UploadInstance } from 'element-plus'
+import eventBus from '/@/utils/mitt'
+
+const uploadRef = ref<UploadInstance>()
+
+defineProps({
+  title: {
+    type: String,
+    default: '',
+  },
+})
+
+const state = reactive({
+  showDialog: false,
+  sureLoading: false,
+  fileList: [] as UploadFile[],
+})
+
+const uploadAction = computed(() => {
+  return import.meta.env.VITE_API_URL + '/api/admin/file/upload-file'
+})
+
+const uploadHeaders = computed(() => {
+  return { Authorization: 'Bearer ' + getToken() }
+})
+
+// 打开对话框
+const open = async (row: any = {}) => {
+  state.showDialog = true
+}
+
+// 上传成功
+const onSuccess = (response: any, uploadFile: UploadFile, uploadFiles: UploadFiles) => {
+  if (response?.success) {
+    eventBus.emit('refreshFile')
+  }
+}
+
+// 取消
+const onCancel = () => {
+  state.showDialog = false
+}
+
+// 确定
+const onSure = async () => {
+  uploadRef.value!.submit()
+}
+
+defineExpose({
+  open,
+})
+</script>
+
+<script lang="ts">
+import { defineComponent } from 'vue'
+
+export default defineComponent({
+  name: 'admin/file/upload',
+})
+</script>

+ 32 - 5
src/views/admin/file/index.vue

@@ -7,14 +7,19 @@
         </el-form-item>
         <el-form-item>
           <el-button type="primary" icon="ele-Search" @click="onQuery"> 查询 </el-button>
+          <el-button type="primary" icon="ele-Upload" @click="onUpload"> 上传 </el-button>
         </el-form-item>
       </el-form>
     </el-card>
 
     <el-card shadow="never" style="margin-top: 8px">
       <el-table v-loading="state.loading" :data="state.fileListData" row-key="id" style="width: 100%">
-        <el-table-column prop="fileName" label="文件名" min-width="120" show-overflow-tooltip />
-        <el-table-column prop="createdTime" label="更新时间" :formatter="formatterTime" width="120" />
+        <el-table-column prop="fileName" label="文件名" :formatter="formatterFileName" min-width="120" show-overflow-tooltip />
+        <el-table-column prop="sizeFormat" label="大小" width="120" />
+        <el-table-column prop="providerName" label="供应商" width="80" />
+        <el-table-column prop="bucketName" label="存储桶" width="80" />
+        <el-table-column prop="createdUserName" label="上传者" width="80" />
+        <el-table-column prop="createdTime" label="更新时间" :formatter="formatterTime" width="100" />
         <el-table-column label="操作" width="180" fixed="right" header-align="center" align="center">
           <!-- <template #default="{ row }">
             
@@ -35,14 +40,21 @@
         />
       </div>
     </el-card>
+
+    <file-upload ref="fileUploadRef" title="上传文件"></file-upload>
   </div>
 </template>
 
 <script lang="ts" setup>
-import { reactive, onMounted } from 'vue'
+import { ref, reactive, onMounted, onUnmounted, defineAsyncComponent } from 'vue'
 import { PageInputFileGetPageDto, FileGetPageOutput } from '/@/api/admin/data-contracts'
-import { File as FileApi } from '/@/api/admin/File'
+import { FileApi } from '/@/api/admin/File'
 import dayjs from 'dayjs'
+import eventBus from '/@/utils/mitt'
+
+const FileUpload = defineAsyncComponent(() => import('./components/file-upload.vue'))
+
+const fileUploadRef = ref()
 
 const state = reactive({
   loading: false,
@@ -61,9 +73,20 @@ const state = reactive({
 
 onMounted(() => {
   onQuery()
+  eventBus.on('refreshFile', async () => {
+    onQuery()
+  })
+})
+
+onUnmounted(() => {
+  eventBus.off('refreshFile')
 })
 
-const formatterTime = (row: any, column: any, cellValue: any) => {
+const formatterFileName = (row: FileGetPageOutput, column: any, cellValue: any) => {
+  return (row.fileName || '') + (row.extension || '')
+}
+
+const formatterTime = (row: FileGetPageOutput, column: any, cellValue: any) => {
   return dayjs(cellValue).format('YYYY-MM-DD HH:mm:ss')
 }
 
@@ -85,6 +108,10 @@ const onCurrentChange = (val: number) => {
   state.pageInput.currentPage = val
   onQuery()
 }
+
+const onUpload = () => {
+  fileUploadRef.value.open()
+}
 </script>
 
 <script lang="ts">

+ 1 - 1
src/views/admin/login/component/account.vue

@@ -68,7 +68,7 @@ import { initBackEndControlRoutes } from '/@/router/backEnd'
 import { Local, Session } from '/@/utils/storage'
 import { formatAxis } from '/@/utils/formatTime'
 import { NextLoading } from '/@/utils/loading'
-import { Auth as AuthApi } from '/@/api/admin/Auth'
+import { AuthApi } from '/@/api/admin/Auth'
 import { AuthLoginInput } from '/@/api/admin/data-contracts'
 import { adminTokenKey } from '/@/api/admin/http-client'
 

+ 1 - 1
src/views/admin/logs/login-log.vue

@@ -48,7 +48,7 @@
 <script lang="ts" setup>
 import { reactive, onMounted } from 'vue'
 import { LoginLogListOutput, PageInputLogGetPageDto } from '/@/api/admin/data-contracts'
-import { LoginLog as LoginLogApi } from '/@/api/admin/LoginLog'
+import { LoginLogApi } from '/@/api/admin/LoginLog'
 import dayjs from 'dayjs'
 
 const state = reactive({

+ 1 - 1
src/views/admin/logs/opration-log.vue

@@ -53,7 +53,7 @@
 <script lang="ts" setup>
 import { reactive, onMounted } from 'vue'
 import { OprationLogListOutput, PageInputLogGetPageDto } from '/@/api/admin/data-contracts'
-import { OprationLog as OprationLogApi } from '/@/api/admin/OprationLog'
+import { OprationLogApi } from '/@/api/admin/OprationLog'
 import dayjs from 'dayjs'
 
 const state = reactive({

+ 1 - 1
src/views/admin/org/components/org-form.vue

@@ -64,7 +64,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, ref, PropType } from 'vue'
 import { OrgListOutput, OrgUpdateInput } from '/@/api/admin/data-contracts'
-import { Org as OrgApi } from '/@/api/admin/Org'
+import { OrgApi } from '/@/api/admin/Org'
 import eventBus from '/@/utils/mitt'
 
 defineProps({

+ 1 - 1
src/views/admin/org/components/org-menu.vue

@@ -26,7 +26,7 @@
 <script lang="ts" setup>
 import { onMounted, reactive, ref, watch, nextTick } from 'vue'
 import { OrgListOutput } from '/@/api/admin/data-contracts'
-import { Org as OrgApi } from '/@/api/admin/Org'
+import { OrgApi } from '/@/api/admin/Org'
 import { listToTree } from '/@/utils/tree'
 import { ElTree } from 'element-plus'
 

+ 1 - 1
src/views/admin/org/index.vue

@@ -53,7 +53,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { OrgListOutput } from '/@/api/admin/data-contracts'
-import { Org as OrgApi } from '/@/api/admin/Org'
+import { OrgApi } from '/@/api/admin/Org'
 import { listToTree } from '/@/utils/tree'
 import eventBus from '/@/utils/mitt'
 

+ 15 - 2
src/views/admin/permission/components/permission-dot-form.vue

@@ -36,6 +36,7 @@
                 collapse-tags-tooltip
                 :filter-node-method="onApiFilterNode"
                 class="w100"
+                @current-change="onApiCurrentChange"
               >
                 <template #default="{ data }">
                   <span class="my-flex my-flex-between">
@@ -88,10 +89,11 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref, PropType } from 'vue'
 import { PermissionListOutput, PermissionUpdateDotInput, ApiListOutput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionApi } from '/@/api/admin/Permission'
-import { Api as ApiApi } from '/@/api/admin/Api'
+import { PermissionApi } from '/@/api/admin/Permission'
+import { ApiApi } from '/@/api/admin/Api'
 import { listToTree } from '/@/utils/tree'
 import eventBus from '/@/utils/mitt'
+import { trimStart, replace } from 'lodash-es'
 
 defineProps({
   title: {
@@ -152,6 +154,17 @@ const onApiFilterNode = (value: string, data: ApiListOutput) => {
   return data.label?.indexOf(value) !== -1 || data.path?.indexOf(value) !== -1
 }
 
+const onApiCurrentChange = (data: ApiListOutput) => {
+  if (data) {
+    if (!state.form.label) {
+      state.form.label = data.label
+    }
+    if (!state.form.code) {
+      state.form.code = trimStart(replace(data.path || '', /\//g, ':'), ':')
+    }
+  }
+}
+
 // 取消
 const onCancel = () => {
   state.showDialog = false

+ 2 - 2
src/views/admin/permission/components/permission-group-form.vue

@@ -104,8 +104,8 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref, PropType, defineAsyncComponent } from 'vue'
 import { PermissionListOutput, PermissionUpdateGroupInput, ViewListOutput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionApi } from '/@/api/admin/Permission'
-import { View as ViewApi } from '/@/api/admin/View'
+import { PermissionApi } from '/@/api/admin/Permission'
+import { ViewApi } from '/@/api/admin/View'
 import { listToTree } from '/@/utils/tree'
 import eventBus from '/@/utils/mitt'
 

+ 3 - 3
src/views/admin/permission/components/permission-menu-form.vue

@@ -125,8 +125,8 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref, PropType, defineAsyncComponent } from 'vue'
 import { PermissionListOutput, PermissionUpdateMenuInput, ViewListOutput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionApi } from '/@/api/admin/Permission'
-import { View as ViewApi } from '/@/api/admin/View'
+import { PermissionApi } from '/@/api/admin/Permission'
+import { ViewApi } from '/@/api/admin/View'
 import { listToTree } from '/@/utils/tree'
 import eventBus from '/@/utils/mitt'
 
@@ -197,7 +197,7 @@ const onViewCurrentChange = (data: ViewListOutput) => {
       state.form.label = data.label
     }
     if (!state.form.path) {
-      state.form.path = data.path
+      state.form.path = '/' + data.path
     }
   }
 }

+ 3 - 3
src/views/admin/permission/index.vue

@@ -113,7 +113,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { PermissionListOutput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionPermission } from '/@/api/admin/Permission'
+import { PermissionApi } from '/@/api/admin/Permission'
 import { listToTree } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'
 import eventBus from '/@/utils/mitt'
@@ -154,7 +154,7 @@ onUnmounted(() => {
 
 const onQuery = async () => {
   state.loading = true
-  const res = await new PermissionPermission().getList()
+  const res = await new PermissionApi().getList()
   if (res.data && res.data.length > 0) {
     state.permissionTreeData = listToTree(cloneDeep(res.data))
     state.formPermissionGroupTreeData = listToTree(cloneDeep(res.data).filter((a) => a.type === 1))
@@ -205,7 +205,7 @@ const onDelete = (row: PermissionListOutput) => {
   proxy.$modal
     .confirmDelete(`确定要删除${row.type === 1 ? '分组' : row.type === 2 ? '菜单' : row.type === 3 ? '权限点' : ''}【${row.label}】?`)
     .then(async () => {
-      await new PermissionPermission().delete({ id: row.id }, { loading: true })
+      await new PermissionApi().delete({ id: row.id }, { loading: true })
       onQuery()
     })
     .catch(() => {})

+ 1 - 1
src/views/admin/personal/components/change-password-form.vue

@@ -47,7 +47,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, ref } from 'vue'
 import { UserChangePasswordInput } from '/@/api/admin/data-contracts'
-import { User as UserApi } from '/@/api/admin/User'
+import { UserApi } from '/@/api/admin/User'
 
 defineProps({
   title: {

+ 1 - 1
src/views/admin/personal/index.vue

@@ -138,7 +138,7 @@
 <script setup lang="ts" name="personal">
 import { reactive, computed, onMounted, toRefs, ref, getCurrentInstance, defineAsyncComponent } from 'vue'
 import { formatAxis } from '/@/utils/formatTime'
-import { User as UserApi } from '/@/api/admin/User'
+import { UserApi } from '/@/api/admin/User'
 import { UserGetBasicOutput } from '/@/api/admin/data-contracts'
 import { useUserInfo } from '/@/stores/userInfo'
 import pinia from '/@/stores/index'

+ 1 - 1
src/views/admin/role/components/role-form.vue

@@ -54,7 +54,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, ref, PropType } from 'vue'
 import { RoleGetListOutput, RoleUpdateInput } from '/@/api/admin/data-contracts'
-import { Role as RoleApi } from '/@/api/admin/Role'
+import { RoleApi } from '/@/api/admin/Role'
 import { cloneDeep } from 'lodash-es'
 import eventBus from '/@/utils/mitt'
 

+ 1 - 1
src/views/admin/role/components/set-role-data-scope.vue

@@ -33,7 +33,7 @@
 <script lang="ts" setup>
 import { ref, toRefs, reactive, computed, defineAsyncComponent } from 'vue'
 import { RoleGetListOutput, RoleSetDataScopeInput } from '/@/api/admin/data-contracts'
-import { Role as RoleApi } from '/@/api/admin/Role'
+import { RoleApi } from '/@/api/admin/Role'
 
 const OrgMenu = defineAsyncComponent(() => import('/@/views/admin/org/components/org-menu.vue'))
 

+ 1 - 1
src/views/admin/role/components/set-role-menu.vue

@@ -26,7 +26,7 @@
 <script lang="ts" setup>
 import { ref, reactive, getCurrentInstance, computed } from 'vue'
 import { RoleGetListOutput, PermissionAssignInput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionApi } from '/@/api/admin/Permission'
+import { PermissionApi } from '/@/api/admin/Permission'
 import { ElTree } from 'element-plus'
 import { listToTree } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'

+ 1 - 1
src/views/admin/role/index.vue

@@ -104,7 +104,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, nextTick, defineAsyncComponent } from 'vue'
 import { RoleGetListOutput, UserGetRoleUserListOutput, UserGetPageOutput, RoleAddRoleUserListInput, RoleType } from '/@/api/admin/data-contracts'
-import { Role as RoleApi } from '/@/api/admin/Role'
+import { RoleApi } from '/@/api/admin/Role'
 import { listToTree } from '/@/utils/tree'
 import { ElTable } from 'element-plus'
 import { cloneDeep } from 'lodash-es'

+ 1 - 1
src/views/admin/task/components/task-logs.vue

@@ -40,7 +40,7 @@
 <script lang="ts" setup>
 import { reactive } from 'vue'
 import { ResultOutputPageOutputTaskLog, PageInputTaskLogGetPageDto, TaskListOutput } from '/@/api/admin/data-contracts'
-import { TaskLog as TaskLogApi } from '/@/api/admin/TaskLog'
+import { TaskLogApi } from '/@/api/admin/TaskLog'
 import dayjs from 'dayjs'
 
 defineProps({

+ 1 - 1
src/views/admin/task/index.vue

@@ -82,7 +82,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, defineAsyncComponent } from 'vue'
 import { TaskListOutput, PageInputTaskGetPageDto } from '/@/api/admin/data-contracts'
-import { Task as TaskApi } from '/@/api/admin/Task'
+import { TaskApi } from '/@/api/admin/Task'
 import dayjs from 'dayjs'
 
 // 引入组件

+ 1 - 1
src/views/admin/tenant/components/set-tenant-menu.vue

@@ -26,7 +26,7 @@
 <script lang="ts" setup>
 import { ref, reactive, getCurrentInstance, computed } from 'vue'
 import { TenantListOutput, PermissionSaveTenantPermissionsInput } from '/@/api/admin/data-contracts'
-import { Permission as PermissionApi } from '/@/api/admin/Permission'
+import { PermissionApi } from '/@/api/admin/Permission'
 import { ElTree } from 'element-plus'
 import { listToTree } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'

+ 1 - 1
src/views/admin/tenant/components/tenant-form.vue

@@ -55,7 +55,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref } from 'vue'
 import { TenantAddInput, TenantUpdateInput } from '/@/api/admin/data-contracts'
-import { Tenant as TenantApi } from '/@/api/admin/Tenant'
+import { TenantApi } from '/@/api/admin/Tenant'
 import { testMobile, testEmail } from '/@/utils/test'
 import eventBus from '/@/utils/mitt'
 

+ 1 - 1
src/views/admin/tenant/index.vue

@@ -56,7 +56,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { TenantListOutput, PageInputTenantGetPageDto } from '/@/api/admin/data-contracts'
-import { Tenant as TenantApi } from '/@/api/admin/Tenant'
+import { TenantApi } from '/@/api/admin/Tenant'
 import eventBus from '/@/utils/mitt'
 import { auth } from '/@/utils/authFunction'
 

+ 4 - 4
src/views/admin/user/components/user-form.vue

@@ -102,9 +102,9 @@
 <script lang="ts" setup>
 import { reactive, toRefs, getCurrentInstance, ref, watch, defineAsyncComponent } from 'vue'
 import { UserAddInput, UserUpdateInput, OrgListOutput, RoleGetListOutput } from '/@/api/admin/data-contracts'
-import { User as UserApi } from '/@/api/admin/User'
-import { Org as OrgApi } from '/@/api/admin/Org'
-import { Role as roleApi } from '/@/api/admin/Role'
+import { UserApi } from '/@/api/admin/User'
+import { OrgApi } from '/@/api/admin/Org'
+import { RoleApi } from '/@/api/admin/Role'
 import { listToTree, treeToList } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'
 import { testMobile, testEmail } from '/@/utils/test'
@@ -181,7 +181,7 @@ const getOrgs = async () => {
 }
 
 const getRoles = async () => {
-  const res = await new roleApi().getList()
+  const res = await new RoleApi().getList()
   if (res?.success && res.data && res.data.length > 0) {
     state.roleTreeData = listToTree(res.data)
   } else {

+ 1 - 1
src/views/admin/user/components/user-select.vue

@@ -67,7 +67,7 @@
 import { ref, reactive, defineAsyncComponent } from 'vue'
 import { ElTable } from 'element-plus'
 import { UserGetPageOutput, PageInputUserGetPageDto, OrgListOutput } from '/@/api/admin/data-contracts'
-import { User as UserApi } from '/@/api/admin/User'
+import { UserApi } from '/@/api/admin/User'
 
 // 引入组件
 const OrgMenu = defineAsyncComponent(() => import('/@/views/admin/org/components/org-menu.vue'))

+ 1 - 1
src/views/admin/user/index.vue

@@ -72,7 +72,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { UserGetPageOutput, PageInputUserGetPageDto, OrgListOutput, UserSetManagerInput, UserResetPasswordInput } from '/@/api/admin/data-contracts'
-import { User as UserApi } from '/@/api/admin/User'
+import { UserApi } from '/@/api/admin/User'
 import eventBus from '/@/utils/mitt'
 import { auth } from '/@/utils/authFunction'
 

+ 4 - 4
src/views/admin/view/components/view-form.vue

@@ -68,7 +68,7 @@
 <script lang="ts" setup>
 import { reactive, toRefs, ref, PropType } from 'vue'
 import { ViewListOutput, ViewUpdateInput } from '/@/api/admin/data-contracts'
-import { View as ViewView } from '/@/api/admin/View'
+import { ViewApi } from '/@/api/admin/View'
 import eventBus from '/@/utils/mitt'
 
 defineProps({
@@ -96,7 +96,7 @@ const { form } = toRefs(state)
 // 打开对话框
 const open = async (row: any = {}) => {
   if (row.id > 0) {
-    const res = await new ViewView().get({ id: row.id }, { loading: true })
+    const res = await new ViewApi().get({ id: row.id }, { loading: true })
 
     if (res?.success) {
       let formData = res.data as ViewUpdateInput
@@ -126,9 +126,9 @@ const onSure = () => {
     let res = {} as any
     state.form.parentId = state.form.parentId && state.form.parentId > 0 ? state.form.parentId : undefined
     if (state.form.id != undefined && state.form.id > 0) {
-      res = await new ViewView().update(state.form, { showSuccessMessage: true })
+      res = await new ViewApi().update(state.form, { showSuccessMessage: true })
     } else {
-      res = await new ViewView().add(state.form, { showSuccessMessage: true })
+      res = await new ViewApi().add(state.form, { showSuccessMessage: true })
     }
 
     state.sureLoading = false

+ 3 - 3
src/views/admin/view/index.vue

@@ -54,7 +54,7 @@
 <script lang="ts" setup>
 import { ref, reactive, onMounted, getCurrentInstance, onUnmounted, defineAsyncComponent } from 'vue'
 import { ViewListOutput } from '/@/api/admin/data-contracts'
-import { View as ViewView } from '/@/api/admin/View'
+import { ViewApi } from '/@/api/admin/View'
 import { listToTree } from '/@/utils/tree'
 import { cloneDeep } from 'lodash-es'
 import eventBus from '/@/utils/mitt'
@@ -88,7 +88,7 @@ onUnmounted(() => {
 
 const onQuery = async () => {
   state.loading = true
-  const res = await new ViewView().getList()
+  const res = await new ViewApi().getList()
   if (res.data && res.data.length > 0) {
     state.viewTreeData = listToTree(cloneDeep(res.data))
   } else {
@@ -112,7 +112,7 @@ const onDelete = (row: ViewListOutput) => {
   proxy.$modal
     .confirmDelete(`确定要删除视图【${row.label}】?`)
     .then(async () => {
-      await new ViewView().delete({ id: row.id }, { loading: true })
+      await new ViewApi().delete({ id: row.id }, { loading: true })
       onQuery()
     })
     .catch(() => {})