refactor: 重构项目配置和布局
- 移除了 OpenController 中的 @CheckOpenApi 注解 - 更新了 Layout 组件中的标题和 logo 属性 - 修改了路由配置,使用 __APP_INFO.moduleName 替代 __APP_ENV.VITE_APP_MODULE_NAME - 更新了全局类型定义,增加了 __APP_INFO 对象 - 调整了 Vite 环境变量配置,移除了 VITE_APP_MODULE_NAME - 更新了项目名称和版本号
This commit is contained in:
parent
372d7e12cf
commit
a2819042df
|
@ -1,17 +0,0 @@
|
|||
package com.changhu.common.annotation;
|
||||
|
||||
import com.changhu.common.enums.OpenApiType;
|
||||
|
||||
import java.lang.annotation.*;
|
||||
|
||||
/**
|
||||
* @author 20252
|
||||
* @createTime 2024/10/9 下午5:14
|
||||
* @desc 检查openApi
|
||||
*/
|
||||
@Target({ElementType.METHOD})
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Documented
|
||||
public @interface CheckOpenApi {
|
||||
OpenApiType value();
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
package com.changhu.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 20252
|
||||
* @createTime 2024/10/9 下午5:10
|
||||
* @desc OpenApiType...
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum OpenApiType {
|
||||
Information_on_enterprises_and_institutions("获取企事业单位信息", Arrays.asList("1fe0aaf3-45a4-4be3-a989-75e914a3f36e", "1fe0aaf3-45a4-a989-75e914a3f36e")),
|
||||
data_view("数据总览", List.of("8da74bbf-c686-4393-b4ec-692091e6d381"));
|
||||
|
||||
private final String desc;
|
||||
private final List<String> openApiKeys;
|
||||
}
|
|
@ -1,8 +1,6 @@
|
|||
package com.changhu.controller;
|
||||
|
||||
import com.changhu.common.annotation.CheckOpenApi;
|
||||
import com.changhu.common.annotation.JsonBody;
|
||||
import com.changhu.common.enums.OpenApiType;
|
||||
import com.changhu.common.pojo.vo.SelectNodeVo;
|
||||
import com.changhu.pojo.dto.DataViewDTO;
|
||||
import com.changhu.pojo.dto.EnterprisesUnitDetailDTO;
|
||||
|
@ -33,7 +31,6 @@ public class OpenController {
|
|||
private OpenApiService openApiService;
|
||||
|
||||
@Operation(summary = "获取企事业单位列表")
|
||||
@CheckOpenApi(value = OpenApiType.Information_on_enterprises_and_institutions)
|
||||
@GetMapping("/getEnterprisesUnit")
|
||||
public List<SelectNodeVo<Long>> getEnterprisesUnit(@Schema(description = "代码") @RequestParam String code,
|
||||
@Schema(description = "等级") @RequestParam Integer level) {
|
||||
|
@ -41,21 +38,18 @@ public class OpenController {
|
|||
}
|
||||
|
||||
@Operation(summary = "企事业单位详情")
|
||||
@CheckOpenApi(value = OpenApiType.Information_on_enterprises_and_institutions)
|
||||
@GetMapping("/enterprisesUnitDetailById")
|
||||
public EnterprisesUnitDetailDTO enterprisesUnitDetailById(@Schema(description = "企事业单位id") @RequestParam Long enterprisesUnitId) {
|
||||
return openApiService.enterprisesUnitDetailById(enterprisesUnitId);
|
||||
}
|
||||
|
||||
@Operation(summary = "数据总览")
|
||||
@CheckOpenApi(value = OpenApiType.data_view)
|
||||
@GetMapping("/dataView")
|
||||
public DataViewDTO dataView() {
|
||||
return openApiService.dataView();
|
||||
}
|
||||
|
||||
@Operation(summary = "保安单位使用情况统计")
|
||||
@CheckOpenApi(value = OpenApiType.Information_on_enterprises_and_institutions)
|
||||
@GetMapping("/securityUnitUseStatistics")
|
||||
public List<SecurityUnitUseStatisticsDTO> securityUnitUseStatistics(@Schema(description = "代码") @RequestParam String code,
|
||||
@Schema(description = "等级") @RequestParam Integer level) {
|
||||
|
@ -63,7 +57,6 @@ public class OpenController {
|
|||
}
|
||||
|
||||
@Operation(summary = "服务项目安保人员花名册")
|
||||
@CheckOpenApi(value = OpenApiType.Information_on_enterprises_and_institutions)
|
||||
@GetMapping("/serviceProjectUserRoster")
|
||||
public List<ServiceProjectSecurityUserRosterDTO> serviceProjectUserRoster(@Schema(description = "服务项目id") Long serviceProjectId) {
|
||||
return openApiService.serviceProjectUserRoster(serviceProjectId);
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
package com.changhu.support.interceptor;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.changhu.common.annotation.CheckOpenApi;
|
||||
import com.changhu.common.exception.MessageException;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.web.method.HandlerMethod;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 20252
|
||||
* @createTime 2024/10/9 下午5:05
|
||||
* @desc OpenApiInterceptor...
|
||||
*/
|
||||
@Slf4j
|
||||
public class OpenApiInterceptor implements HandlerInterceptor {
|
||||
|
||||
@Override
|
||||
public boolean preHandle(@NotNull HttpServletRequest request, @NotNull HttpServletResponse response, @NotNull Object handler) {
|
||||
if (handler instanceof HandlerMethod handlerMethod) {
|
||||
String header = request.getHeader("X-API-KEY");
|
||||
if (StrUtil.isBlank(header)) {
|
||||
throw new MessageException("请求头缺失");
|
||||
}
|
||||
log.info("apiKey:{} {} 请求:{}", header, LocalDateTime.now(), request.getRequestURI());
|
||||
CheckOpenApi methodAnnotation = handlerMethod.getMethodAnnotation(CheckOpenApi.class);
|
||||
if (methodAnnotation != null) {
|
||||
List<String> openApiKeys = methodAnnotation.value().getOpenApiKeys();
|
||||
if (!openApiKeys.contains(header)) {
|
||||
throw new MessageException("openApiKey error!");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -1,8 +1,7 @@
|
|||
VITE_APP_NAME=超级后台
|
||||
VITE_APP_NAME=保安管理
|
||||
VITE_APP_ENV=development
|
||||
VITE_APP_PORT=1000
|
||||
VITE_DROP_CONSOLE=false
|
||||
VITE_APP_MODULE_NAME=superManagement
|
||||
|
||||
# axios
|
||||
VITE_APP_BASE_API=/api
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
VITE_APP_NAME=超级后台
|
||||
VITE_APP_NAME=保安管理
|
||||
VITE_APP_ENV=production
|
||||
VITE_APP_PORT=1001
|
||||
VITE_DROP_CONSOLE=true
|
||||
VITE_APP_MODULE_NAME=superManagement
|
||||
|
||||
# axios
|
||||
VITE_APP_BASE_API=/api
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
||||
<script type="module" src="/src/assets/iconfont/iconfont.js"></script>
|
||||
|
||||
<title>超级后台</title>
|
||||
<title>保安管理</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "supermanagement",
|
||||
"appName": "超级后台",
|
||||
"name": "super_management",
|
||||
"appName": "保安管理",
|
||||
"private": true,
|
||||
"version": "1.0.0",
|
||||
"type": "module",
|
||||
|
|
|
@ -7,10 +7,10 @@
|
|||
collapsible
|
||||
>
|
||||
<div v-if="!collapsed" class="title flex-center">
|
||||
<div>超级后台</div>
|
||||
<div>{{ appInfo.appName }}</div>
|
||||
</div>
|
||||
<div v-else class="logo flex-center">
|
||||
<img src="@/assets/vue.svg" title="超级后台" alt="xx">
|
||||
<img src="@/assets/vue.svg" :title="appInfo.appName" alt="xx">
|
||||
</div>
|
||||
<SystemMenus/>
|
||||
</a-layout-sider>
|
||||
|
@ -40,6 +40,8 @@ import {ref} from "vue";
|
|||
import LayoutHeader from "@/components/layout/header/LayoutHeader.vue";
|
||||
import SystemMenus from "@/components/layout/SystemMenus.vue";
|
||||
|
||||
const appInfo = __APP_INFO
|
||||
|
||||
const collapsed = ref<boolean>(false);
|
||||
|
||||
const keepAliveNames = ref<string[]>([])
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
declare const __APP_ENV: ImportMetaEnv;
|
||||
declare const __APP_INFO: {
|
||||
moduleName: string,
|
||||
appName: string,
|
||||
version: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 全局返回
|
||||
|
|
|
@ -10,7 +10,7 @@ import {ROUTER_WHITE_LIST} from "@/config";
|
|||
* createWebHashHistory: 路径带#号 这部分 URL 从未被发送到服务器,所以它不需要在服务器层面上进行任何特殊处理,影响SEO
|
||||
*/
|
||||
const router = createRouter({
|
||||
history: createWebHistory(__APP_ENV.VITE_APP_MODULE_NAME),
|
||||
history: createWebHistory(__APP_INFO.moduleName),
|
||||
routes: [...staticRouter],
|
||||
strict: false,
|
||||
scrollBehavior: () => ({left: 0, top: 0}),
|
||||
|
|
|
@ -6,8 +6,6 @@ interface ImportMetaEnv {
|
|||
readonly VITE_APP_ENV: 'development' | 'production';
|
||||
// 启动端口
|
||||
readonly VITE_APP_PORT: number;
|
||||
// 模块名称
|
||||
readonly VITE_APP_MODULE_NAME: string;
|
||||
|
||||
// axios
|
||||
readonly VITE_APP_BASE_API: string;
|
||||
|
|
|
@ -4,6 +4,7 @@ import Components from 'unplugin-vue-components/vite';
|
|||
import {AntDesignVueResolver} from 'unplugin-vue-components/resolvers';
|
||||
import * as path from "node:path";
|
||||
import vueJsx from '@vitejs/plugin-vue-jsx'
|
||||
import {appName, version, name} from './package.json'
|
||||
|
||||
const pathSrc = path.resolve(__dirname, 'src');
|
||||
|
||||
|
@ -12,9 +13,14 @@ export default defineConfig(({mode}) => {
|
|||
const env: Record<string, string> = loadEnv(mode, process.cwd(), '')
|
||||
return {
|
||||
define: {
|
||||
__APP_ENV: JSON.stringify(env)
|
||||
__APP_ENV: JSON.stringify(env),
|
||||
__APP_INFO: JSON.stringify({
|
||||
moduleName: name,
|
||||
appName,
|
||||
version
|
||||
})
|
||||
},
|
||||
base: `/${env['VITE_APP_MODULE_NAME']}/`,
|
||||
base: `/${name}/`,
|
||||
plugins: [
|
||||
vue(),
|
||||
vueJsx(),
|
||||
|
|
Loading…
Reference in New Issue