This commit is contained in:
biybuy 2026-02-06 12:01:39 +08:00
parent afcaaf104a
commit 3eb0641842
37 changed files with 509 additions and 408 deletions

View File

@ -1,6 +1,14 @@
# ============ 生产环境部署必读(避免「本地可以、线上不行」)============
# 1. 本文件必须真正生效:确认 oms.nanafa.com 的请求由「本 server 块」处理
# - 若用 include:确保 include 的是含本 server 的 conf,且无其它 server 抢先匹配
# - 更新后必须执行:nginx -t && nginx -s reload
# 2. /api、/Track 由 nginx 代理到 api.nanafa.com,避免浏览器跨域 405;rbac 由前端直连 admin
# 3. 使用 HTTP(listen 80);root 指向「包含 index.html 的目录」
# ============================================================================
server { server {
listen 80; listen 80; # HTTP
server_name 10.1.20.6; server_name oms.nanafa.com 10.1.20.6;
# 启用gzip压缩 # 启用gzip压缩
gzip on; gzip on;
@ -16,35 +24,15 @@ server {
# brotli_comp_level 6; # brotli_comp_level 6;
# brotli_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json application/xml image/svg+xml; # brotli_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json application/xml image/svg+xml;
# 启用 HTTP/2(如果使用 HTTPS)
# listen 443 ssl http2;
# 静态文件根目录 # 静态文件根目录
root /usr/share/nginx/html; root /usr/share/nginx/html;
# ============ API 代理配置(放在最前面,使用 ^~ 提高优先级)============ # ============ API 代理(同源请求,避免跨域 405)============
location ^~ /api/ {
# RBAC 权限管理服务代理 rewrite ^/api/(.*)$ /itfx/$1 break;
location ^~ /rbac { proxy_pass http://api.nanafa.com;
proxy_pass http://43.139.210.35:5281;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host api.nanafa.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
proxy_buffering off;
}
# trackApi 服务代理(使用 ^~ 确保优先匹配)
location ^~ /api/trackApi {
rewrite ^/api/trackApi(.*)$ $1 break;
proxy_pass http://43.139.210.35:8889;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
@ -52,17 +40,11 @@ server {
proxy_send_timeout 30s; proxy_send_timeout 30s;
proxy_read_timeout 30s; proxy_read_timeout 30s;
} }
location ^~ /Track {
# 排除前端路由路径,只代理真正的 API 请求 rewrite ^/Track(.*)$ /track/Track$1 break;
# 前端路由路径(驼峰命名):upstreamInterface, downstreamInterface, upstreamInterfaceConfig, proxy_pass http://api.nanafa.com;
# upstreamInterfaceConfigEdit, appList, requestLog, callStatistics, apiDebugger 等
# 使用负向前瞻正则,排除这些前端路由路径
# 前端路由会继续往下走到 location /,由 try_files 返回 index.html(与 /track/ 路由一样)
location ~ ^/api/(?!(trackApi|upstreamInterface|downstreamInterface|upstreamInterfaceConfig|upstreamInterfaceConfigEdit|appList|requestLog|callStatistics|apiDebugger)) {
rewrite ^/api(.*)$ $1 break;
proxy_pass http://43.139.210.35:8888;
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_set_header Host api.nanafa.com;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Proto $scheme;
@ -102,17 +84,18 @@ server {
} }
# ============ SPA 前端路由(放在最后)============ # ============ SPA 前端路由(放在最后)============
# 所有非文件请求都回落到 index.html,避免刷新/直接访问子路径 404
location / { location / {
index index.html; index index.html;
try_files $uri $uri/ /index.html; try_files $uri $uri/ /index.html;
}
# HTML 不缓存
location ~* \.html?$ { # HTML 不缓存(单独 location 避免嵌套导致 fallback 异常)
add_header Cache-Control "no-cache, no-store, must-revalidate"; location = /index.html {
add_header Pragma "no-cache"; add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Expires "0"; add_header Pragma "no-cache";
} add_header Expires "0";
} }
# 错误页面 # 错误页面

View File

@ -61,7 +61,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'interface-Provider', projectName: 'interface-Provider',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 轨迹状态 // 轨迹状态
@ -71,7 +71,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryState', projectName: 'TrajectoryState',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 轨迹标志 // 轨迹标志
@ -82,7 +82,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryFlag', projectName: 'TrajectoryFlag',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
{ {
@ -91,7 +91,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryContent', projectName: 'TrajectoryContent',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 预警服务 // 预警服务
@ -102,7 +102,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'WarningServices', projectName: 'WarningServices',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 轨迹订单 // 轨迹订单
@ -112,7 +112,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryOrder', projectName: 'TrajectoryOrder',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 轨迹拉取 // 轨迹拉取
@ -122,7 +122,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryPull', projectName: 'TrajectoryPull',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 轨迹推送 // 轨迹推送
{ {
@ -131,7 +131,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'TrajectoryPush', projectName: 'TrajectoryPush',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 提供接口 // 提供接口
@ -141,7 +141,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'InterfaceMappingProvider', projectName: 'InterfaceMappingProvider',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
// 应用服务接口 // 应用服务接口
@ -151,7 +151,7 @@ export default [
serversPath: './src/api', serversPath: './src/api',
requestLibPath: '@/utils/request', requestLibPath: '@/utils/request',
projectName: 'ApplicationServicesProvider', projectName: 'ApplicationServicesProvider',
apiPrefix: "'api/trackApi'", apiPrefix: "'Track'",
}, },
{ {

View File

@ -8,7 +8,7 @@ export async function postCleanCache(
params: API.postCleanCacheParams, params: API.postCleanCacheParams,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Dictionary/CleanCache`, { return request<any>(`Track/Dictionary/CleanCache`, {
method: 'POST', method: 'POST',
params: { params: {
...params, ...params,
@ -23,7 +23,7 @@ export async function getGetList(
params: API.getGetListParams, params: API.getGetListParams,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.EnumCacheEntry[]>(`api/trackApi/Dictionary/GetList`, { return request<API.EnumCacheEntry[]>(`Track/Dictionary/GetList`, {
method: 'GET', method: 'GET',
params: { params: {
...params, ...params,

View File

@ -7,7 +7,7 @@ export async function postOrderBatchUpsert(
body: API.BatchUpsertOrderInput, body: API.BatchUpsertOrderInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Order/BatchUpsert`, { return request<any>(`Track/ProviderService/Order/BatchUpsert`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postOrderDelete(
body: API.DeleteOrderInput, body: API.DeleteOrderInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/ProviderService/Order/Delete`, { return request<API.IdBaseDto>(`Track/ProviderService/Order/Delete`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -37,7 +37,7 @@ export async function postOrderLink(
body: API.LinkOrderInput, body: API.LinkOrderInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Order/Link`, { return request<any>(`Track/ProviderService/Order/Link`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -53,7 +53,7 @@ export async function postOrderUpdateOrderPullConfigs(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/ProviderService/Order/UpdateOrderPullConfigs`, `Track/ProviderService/Order/UpdateOrderPullConfigs`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -70,7 +70,7 @@ export async function postOrderUpsert(
body: API.UpsertOrderInput, body: API.UpsertOrderInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/ProviderService/Order/Upsert`, { return request<API.IdBaseDto>(`Track/ProviderService/Order/Upsert`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -7,7 +7,7 @@ export async function postTrackBatchDelete(
body: API.BatchDeleteTrackInput, body: API.BatchDeleteTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/BatchDelete`, { return request<any>(`Track/ProviderService/Track/BatchDelete`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postTrackBatchDeleteByEsId(
body: API.BatchDeleteTrackByEsIdInput, body: API.BatchDeleteTrackByEsIdInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/BatchDeleteByEsId`, { return request<any>(`Track/ProviderService/Track/BatchDeleteByEsId`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -37,7 +37,7 @@ export async function postTrackBatchUpsert(
body: API.BatchUpsertTrackInput, body: API.BatchUpsertTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/BatchUpsert`, { return request<any>(`Track/ProviderService/Track/BatchUpsert`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -52,7 +52,7 @@ export async function postTrackDelete(
body: API.DeleteTrackInput, body: API.DeleteTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/Delete`, { return request<any>(`Track/ProviderService/Track/Delete`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -68,7 +68,7 @@ export async function postTrackQuery(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackOutput[]>( return request<API.GetTrackOutput[]>(
`api/trackApi/ProviderService/Track/Query`, `Track/ProviderService/Track/Query`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -86,7 +86,7 @@ export async function postTrackQueryV2(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackOutput[]>( return request<API.GetTrackOutput[]>(
`api/trackApi/ProviderService/Track/QueryV2`, `Track/ProviderService/Track/QueryV2`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -103,7 +103,7 @@ export async function postTrackUpsert(
body: API.UpsertTrackInput, body: API.UpsertTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/Upsert`, { return request<any>(`Track/ProviderService/Track/Upsert`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -9,7 +9,7 @@ export async function postTrackGetTrackContents(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackContentOutput[]>( return request<API.TrackContentOutput[]>(
`api/trackApi/ProviderService/Track/GetTrackContents`, `Track/ProviderService/Track/GetTrackContents`,
{ {
method: 'POST', method: 'POST',
params: { params: {

View File

@ -7,7 +7,7 @@ export async function postTrackRefresh(
body: API.RefreshTrackInput, body: API.RefreshTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/ProviderService/Track/Refresh`, { return request<boolean>(`Track/ProviderService/Track/Refresh`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -23,7 +23,7 @@ export async function postTrackTrackRefreshEventTest(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>( return request<boolean>(
`api/trackApi/ProviderService/Track/TrackRefreshEventTest`, `Track/ProviderService/Track/TrackRefreshEventTest`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -9,7 +9,7 @@ export async function getTrackGetTrackPushContentList(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackPushContentDto[]>( return request<API.TrackPushContentDto[]>(
`api/trackApi/ProviderService/Track/GetTrackPushContentList`, `Track/ProviderService/Track/GetTrackPushContentList`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -27,7 +27,7 @@ export async function getTrackGetTrackPushRecords(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackPushRecordOutput[]>( return request<API.TrackPushRecordOutput[]>(
`api/trackApi/ProviderService/Track/GetTrackPushRecords`, `Track/ProviderService/Track/GetTrackPushRecords`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -43,7 +43,7 @@ export async function postTrackPush(
body: API.PushTrackInput, body: API.PushTrackInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ProviderService/Track/Push`, { return request<any>(`Track/ProviderService/Track/Push`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -59,7 +59,7 @@ export async function postTrackQueryTrackPushRecords(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackPushRecordOutput[]>( return request<API.TrackPushRecordOutput[]>(
`api/trackApi/ProviderService/Track/QueryTrackPushRecords`, `Track/ProviderService/Track/QueryTrackPushRecords`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -8,7 +8,7 @@ export async function postTrackQueryTrackPullMappings(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.QueryTrackPullMappingsInfo[]>( return request<API.QueryTrackPullMappingsInfo[]>(
`api/trackApi/ProviderService/Track/QueryTrackPullMappings`, `Track/ProviderService/Track/QueryTrackPullMappings`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postEdit(
body: API.EditTrackContentInput, body: API.EditTrackContentInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Track/Content/Edit`, { return request<any>(`Track/Track/Content/Edit`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postEditMap(
body: API.EditTrackContentMapInput, body: API.EditTrackContentMapInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/Content/EditMap`, { return request<boolean>(`Track/Track/Content/EditMap`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -38,7 +38,7 @@ export async function postGetAvailableContent(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetAvailableContentOutput[]>( return request<API.GetAvailableContentOutput[]>(
`api/trackApi/Track/Content/GetAvailableContent`, `Track/Track/Content/GetAvailableContent`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -56,7 +56,7 @@ export async function postGetContentDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetContentDetailOutput>( return request<API.GetContentDetailOutput>(
`api/trackApi/Track/Content/GetContentDetail`, `Track/Track/Content/GetContentDetail`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -75,7 +75,7 @@ export async function getGetDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackContentDetailDto>( return request<API.GetTrackContentDetailDto>(
`api/trackApi/Track/Content/GetDetail`, `Track/Track/Content/GetDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -92,7 +92,7 @@ export async function postGetList(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackContentListDtoPagedResult>( return request<API.GetTrackContentListDtoPagedResult>(
`api/trackApi/Track/Content/GetList`, `Track/Track/Content/GetList`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -111,7 +111,7 @@ export async function getGetMapDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackContentMapDetailOutputVO>( return request<API.GetTrackContentMapDetailOutputVO>(
`api/trackApi/Track/Content/GetMapDetail`, `Track/Track/Content/GetMapDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -128,7 +128,7 @@ export async function postGetMapPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackContentMapPageOutputVOPagedResult>( return request<API.GetTrackContentMapPageOutputVOPagedResult>(
`api/trackApi/Track/Content/GetMapPage`, `Track/Track/Content/GetMapPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -146,7 +146,7 @@ export async function postGetTrackContentByCode(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackContentByCodeOutput>( return request<API.GetTrackContentByCodeOutput>(
`api/trackApi/Track/Content/GetTrackContentByCode`, `Track/Track/Content/GetTrackContentByCode`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postEdit(
body: API.EditTrackFlagInput, body: API.EditTrackFlagInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Track/Flag/Edit`, { return request<any>(`Track/Track/Flag/Edit`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -24,7 +24,7 @@ export async function getGetDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackFlagDetailDto>( return request<API.GetTrackFlagDetailDto>(
`api/trackApi/Track/Flag/GetDetail`, `Track/Track/Flag/GetDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -41,7 +41,7 @@ export async function postGetList(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackFlagListDtoPagedResult>( return request<API.GetTrackFlagListDtoPagedResult>(
`api/trackApi/Track/Flag/GetList`, `Track/Track/Flag/GetList`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -8,7 +8,7 @@ export async function postDeleteTrackById(
params: API.postDeleteTrackByIdParams, params: API.postDeleteTrackByIdParams,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/Order/DeleteTrackById`, { return request<boolean>(`Track/Track/Order/DeleteTrackById`, {
method: 'POST', method: 'POST',
params: { params: {
...params, ...params,
@ -24,7 +24,7 @@ export async function postGetDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackOrderDetailDto[]>( return request<API.TrackOrderDetailDto[]>(
`api/trackApi/Track/Order/GetDetails`, `Track/Track/Order/GetDetails`,
{ {
method: 'POST', method: 'POST',
params: { params: {
@ -41,7 +41,7 @@ export async function postGetDetailTimeline(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetDetailTimelineOutput[]>( return request<API.GetDetailTimelineOutput[]>(
`api/trackApi/Track/Order/GetDetailTimeline`, `Track/Track/Order/GetDetailTimeline`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -60,7 +60,7 @@ export async function getGetOrderOperationsById(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.OrderOperationRecordIndex[]>( return request<API.OrderOperationRecordIndex[]>(
`api/trackApi/Track/Order/GetOrderOperationsById`, `Track/Track/Order/GetOrderOperationsById`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -77,7 +77,7 @@ export async function postGetTrackOrderList(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackOrderDtoPagedResult>( return request<API.TrackOrderDtoPagedResult>(
`api/trackApi/Track/Order/GetTrackOrderList`, `Track/Track/Order/GetTrackOrderList`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -96,7 +96,7 @@ export async function getGetTrackPushRecords(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TrackPushRecordOutput[]>( return request<API.TrackPushRecordOutput[]>(
`api/trackApi/Track/Order/GetTrackPushRecords`, `Track/Track/Order/GetTrackPushRecords`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -112,7 +112,7 @@ export async function postUpdateOrderStatus(
body: API.UpdateOrderStatusInput, body: API.UpdateOrderStatusInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/Order/UpdateOrderStatus`, { return request<boolean>(`Track/Track/Order/UpdateOrderStatus`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -7,7 +7,7 @@ export async function postEdit(
body: API.EditTrackPullConfigInput, body: API.EditTrackPullConfigInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/PullConfig/Edit`, { return request<boolean>(`Track/Track/PullConfig/Edit`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postEditContent(
body: API.EditTrackPullContentInput, body: API.EditTrackPullContentInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/PullConfig/EditContent`, { return request<boolean>(`Track/Track/PullConfig/EditContent`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -39,7 +39,7 @@ export async function getGetContentDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullContentDetailOutputVO>( return request<API.GetTrackPullContentDetailOutputVO>(
`api/trackApi/Track/PullConfig/GetContentDetail`, `Track/Track/PullConfig/GetContentDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -56,7 +56,7 @@ export async function postGetContentPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullContentPageOutputVOPagedResult>( return request<API.GetTrackPullContentPageOutputVOPagedResult>(
`api/trackApi/Track/PullConfig/GetContentPage`, `Track/Track/PullConfig/GetContentPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -75,7 +75,7 @@ export async function getGetDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullConfigDetailOutputVO>( return request<API.GetTrackPullConfigDetailOutputVO>(
`api/trackApi/Track/PullConfig/GetDetail`, `Track/Track/PullConfig/GetDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -92,7 +92,7 @@ export async function postGetPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullConfigPageOutputVOPagedResult>( return request<API.GetTrackPullConfigPageOutputVOPagedResult>(
`api/trackApi/Track/PullConfig/GetPage`, `Track/Track/PullConfig/GetPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -110,7 +110,7 @@ export async function postGetPriorityPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullPriorityPageOutputVOPagedResult>( return request<API.GetTrackPullPriorityPageOutputVOPagedResult>(
`api/trackApi/Track/PullConfig/GetPriorityPage`, `Track/Track/PullConfig/GetPriorityPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -129,7 +129,7 @@ export async function getGetPriorityDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPullPriorityDetailOutputVO>( return request<API.GetTrackPullPriorityDetailOutputVO>(
`api/trackApi/Track/PullConfig/GetPriorityDetail`, `Track/Track/PullConfig/GetPriorityDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -145,7 +145,7 @@ export async function postEditPriority(
body: API.EditTrackPullPriorityInput, body: API.EditTrackPullPriorityInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/PullConfig/EditPriority`, { return request<boolean>(`Track/Track/PullConfig/EditPriority`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -7,7 +7,7 @@ export async function postEdit(
body: API.EditTrackPushConfigInput, body: API.EditTrackPushConfigInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<string>(`api/trackApi/Track/PushConfig/Edit`, { return request<string>(`Track/Track/PushConfig/Edit`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postEditContent(
body: API.EditTrackPushContentInput, body: API.EditTrackPushContentInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/PushConfig/EditContent`, { return request<boolean>(`Track/Track/PushConfig/EditContent`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -39,7 +39,7 @@ export async function getGetContentDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPushContentDetailOutputVO>( return request<API.GetTrackPushContentDetailOutputVO>(
`api/trackApi/Track/PushConfig/GetContentDetail`, `Track/Track/PushConfig/GetContentDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -56,7 +56,7 @@ export async function postGetContentPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPushContentPageOutputVOPagedResult>( return request<API.GetTrackPushContentPageOutputVOPagedResult>(
`api/trackApi/Track/PushConfig/GetContentPage`, `Track/Track/PushConfig/GetContentPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -75,7 +75,7 @@ export async function getGetDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPushConfigDetailOutputVO>( return request<API.GetTrackPushConfigDetailOutputVO>(
`api/trackApi/Track/PushConfig/GetDetail`, `Track/Track/PushConfig/GetDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -92,7 +92,7 @@ export async function postGetPage(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackPushConfigPageOutputVOPagedResult>( return request<API.GetTrackPushConfigPageOutputVOPagedResult>(
`api/trackApi/Track/PushConfig/GetPage`, `Track/Track/PushConfig/GetPage`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -109,7 +109,7 @@ export async function postSortContent(
body: API.SortTrackPushContentInput, body: API.SortTrackPushContentInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<boolean>(`api/trackApi/Track/PushConfig/SortContent`, { return request<boolean>(`Track/Track/PushConfig/SortContent`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -7,7 +7,7 @@ export async function postEdit(
body: API.EditTrackStatusInput, body: API.EditTrackStatusInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Track/Status/Edit`, { return request<any>(`Track/Track/Status/Edit`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -24,7 +24,7 @@ export async function getGetDetail(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackStatusDetailDto>( return request<API.GetTrackStatusDetailDto>(
`api/trackApi/Track/Status/GetDetail`, `Track/Track/Status/GetDetail`,
{ {
method: 'GET', method: 'GET',
params: { params: {
@ -41,7 +41,7 @@ export async function postGetList(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.GetTrackStatusListDtoPagedResult>( return request<API.GetTrackStatusListDtoPagedResult>(
`api/trackApi/Track/Status/GetList`, `Track/Track/Status/GetList`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -8,7 +8,7 @@ export async function postWarningCompleteEditCompleteWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Complete/EditCompleteWarningRuleItem`, `Track/Warning/Complete/EditCompleteWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postWarningCompleteGetCompleteWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.CompleteWarningRuleItemDto[]>( return request<API.CompleteWarningRuleItemDto[]>(
`api/trackApi/Warning/Complete/GetCompleteWarningRuleItem`, `Track/Warning/Complete/GetCompleteWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function postWarningCompleteGetPageCompleteWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.CompleteWarningDetailsDtoPagedResult>( return request<API.CompleteWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Complete/GetPageCompleteWarningDetails`, `Track/Warning/Complete/GetPageCompleteWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -8,7 +8,7 @@ export async function postForewarningServiceKpiAreaAddAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/ForewarningService/KpiArea/AddAreaInfo`, `Track/ForewarningService/KpiArea/AddAreaInfo`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postForewarningServiceKpiAreaCreateKpiArea(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/ForewarningService/KpiArea/CreateKpiArea`, `Track/ForewarningService/KpiArea/CreateKpiArea`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function deleteForewarningServiceKpiAreaDeleteKpiArea(
params: API.deleteForewarningServiceKpiAreaDeleteKpiAreaParams, params: API.deleteForewarningServiceKpiAreaDeleteKpiAreaParams,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ForewarningService/KpiArea/DeleteKpiArea`, { return request<any>(`Track/ForewarningService/KpiArea/DeleteKpiArea`, {
method: 'DELETE', method: 'DELETE',
params: { params: {
...params, ...params,
@ -60,7 +60,7 @@ export async function deleteForewarningServiceKpiAreaDeleteKpiAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/ForewarningService/KpiArea/DeleteKpiAreaInfo`, `Track/ForewarningService/KpiArea/DeleteKpiAreaInfo`,
{ {
method: 'DELETE', method: 'DELETE',
params: { params: {
@ -77,7 +77,7 @@ export async function postForewarningServiceKpiAreaGetKpiAreaInfos(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.RuleAreaInfoDtoPagedResult>( return request<API.RuleAreaInfoDtoPagedResult>(
`api/trackApi/ForewarningService/KpiArea/GetKpiAreaInfos`, `Track/ForewarningService/KpiArea/GetKpiAreaInfos`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -95,7 +95,7 @@ export async function postForewarningServiceKpiAreaGetKpiAreas(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.AreaDtoPagedResult>( return request<API.AreaDtoPagedResult>(
`api/trackApi/ForewarningService/KpiArea/GetKpiAreas`, `Track/ForewarningService/KpiArea/GetKpiAreas`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -112,7 +112,7 @@ export async function postForewarningServiceKpiAreaModifyKpiArea(
body: API.UpdateRuleAreaRequest, body: API.UpdateRuleAreaRequest,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ForewarningService/KpiArea/ModifyKpiArea`, { return request<any>(`Track/ForewarningService/KpiArea/ModifyKpiArea`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -128,7 +128,7 @@ export async function postForewarningServiceKpiAreaModifyKpiAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/ForewarningService/KpiArea/ModifyKpiAreaInfo`, `Track/ForewarningService/KpiArea/ModifyKpiAreaInfo`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postWarningReturnEditReturnWarningRuleItem(
body: API.EditReturnWarningRuleItemInput, body: API.EditReturnWarningRuleItemInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Warning/Return/EditReturnWarningRuleItem`, { return request<any>(`Track/Warning/Return/EditReturnWarningRuleItem`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -23,7 +23,7 @@ export async function postWarningReturnGetPageReturnWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnWarningDetailsDtoPagedResult>( return request<API.ReturnWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Return/GetPageReturnWarningDetails`, `Track/Warning/Return/GetPageReturnWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -41,7 +41,7 @@ export async function postWarningReturnGetReturnMessageRecord(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnMessageRecordDto[]>( return request<API.ReturnMessageRecordDto[]>(
`api/trackApi/Warning/Return/GetReturnMessageRecord`, `Track/Warning/Return/GetReturnMessageRecord`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -59,7 +59,7 @@ export async function postWarningReturnGetReturnWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnWarningRuleItemDto[]>( return request<API.ReturnWarningRuleItemDto[]>(
`api/trackApi/Warning/Return/GetReturnWarningRuleItem`, `Track/Warning/Return/GetReturnWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -76,7 +76,7 @@ export async function postWarningReturnReturnPush(
body: API.ReturnPushInput, body: API.ReturnPushInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<string>(`api/trackApi/Warning/Return/ReturnPush`, { return request<string>(`Track/Warning/Return/ReturnPush`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -8,7 +8,7 @@ export async function postWarningTransportDeleteTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Transport/DeleteTransportWarningScene`, `Track/Warning/Transport/DeleteTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postWarningTransportEditTransportWarningSceneRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Transport/EditTransportWarningSceneRuleItem`, `Track/Warning/Transport/EditTransportWarningSceneRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function postWarningTransportGetPageTransportWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningDetailsDtoPagedResult>( return request<API.TransportWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Transport/GetPageTransportWarningDetails`, `Track/Warning/Transport/GetPageTransportWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -62,7 +62,7 @@ export async function postWarningTransportGetTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningSceneDto[]>( return request<API.TransportWarningSceneDto[]>(
`api/trackApi/Warning/Transport/GetTransportWarningScene`, `Track/Warning/Transport/GetTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -80,7 +80,7 @@ export async function postWarningTransportGetTransportWarningSceneRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningSceneRuleItemDto[]>( return request<API.TransportWarningSceneRuleItemDto[]>(
`api/trackApi/Warning/Transport/GetTransportWarningSceneRuleItem`, `Track/Warning/Transport/GetTransportWarningSceneRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -98,7 +98,7 @@ export async function postWarningTransportUpsertTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/Warning/Transport/UpsertTransportWarningScene`, `Track/Warning/Transport/UpsertTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postWarningGetWarningRule(
body: API.GetWarningRuleInput, body: API.GetWarningRuleInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.WarningRuleDto[]>(`api/trackApi/Warning/GetWarningRule`, { return request<API.WarningRuleDto[]>(`Track/Warning/GetWarningRule`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postWarningUpdateEnabledStatus(
body: API.UpdateEnabledStatusInput, body: API.UpdateEnabledStatusInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/Warning/UpdateEnabledStatus`, { return request<API.IdBaseDto>(`Track/Warning/UpdateEnabledStatus`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -37,7 +37,7 @@ export async function postWarningUpsertWarningRule(
body: API.UpsertWarningRuleInput, body: API.UpsertWarningRuleInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/Warning/UpsertWarningRule`, { return request<API.IdBaseDto>(`Track/Warning/UpsertWarningRule`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -8,7 +8,7 @@ export async function postWarningCompleteEditCompleteWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Complete/EditCompleteWarningRuleItem`, `Track/Warning/Complete/EditCompleteWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postWarningCompleteGetCompleteWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.CompleteWarningRuleItemDto[]>( return request<API.CompleteWarningRuleItemDto[]>(
`api/trackApi/Warning/Complete/GetCompleteWarningRuleItem`, `Track/Warning/Complete/GetCompleteWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function postWarningCompleteGetPageCompleteWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.CompleteWarningDetailsDtoPagedResult>( return request<API.CompleteWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Complete/GetPageCompleteWarningDetails`, `Track/Warning/Complete/GetPageCompleteWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -8,7 +8,7 @@ export async function postForewarningServiceKpiAreaAddAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/ForewarningService/KpiArea/AddAreaInfo`, `Track/ForewarningService/KpiArea/AddAreaInfo`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postForewarningServiceKpiAreaCreateKpiArea(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/ForewarningService/KpiArea/CreateKpiArea`, `Track/ForewarningService/KpiArea/CreateKpiArea`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function deleteForewarningServiceKpiAreaDeleteKpiArea(
params: API.deleteForewarningServiceKpiAreaDeleteKpiAreaParams, params: API.deleteForewarningServiceKpiAreaDeleteKpiAreaParams,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ForewarningService/KpiArea/DeleteKpiArea`, { return request<any>(`Track/ForewarningService/KpiArea/DeleteKpiArea`, {
method: 'DELETE', method: 'DELETE',
params: { params: {
...params, ...params,
@ -60,7 +60,7 @@ export async function deleteForewarningServiceKpiAreaDeleteKpiAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/ForewarningService/KpiArea/DeleteKpiAreaInfo`, `Track/ForewarningService/KpiArea/DeleteKpiAreaInfo`,
{ {
method: 'DELETE', method: 'DELETE',
params: { params: {
@ -77,7 +77,7 @@ export async function postForewarningServiceKpiAreaGetKpiAreaInfos(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.RuleAreaInfoDtoPagedResult>( return request<API.RuleAreaInfoDtoPagedResult>(
`api/trackApi/ForewarningService/KpiArea/GetKpiAreaInfos`, `Track/ForewarningService/KpiArea/GetKpiAreaInfos`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -95,7 +95,7 @@ export async function postForewarningServiceKpiAreaGetKpiAreas(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.AreaDtoPagedResult>( return request<API.AreaDtoPagedResult>(
`api/trackApi/ForewarningService/KpiArea/GetKpiAreas`, `Track/ForewarningService/KpiArea/GetKpiAreas`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -112,7 +112,7 @@ export async function postForewarningServiceKpiAreaModifyKpiArea(
body: API.UpdateRuleAreaRequest, body: API.UpdateRuleAreaRequest,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/ForewarningService/KpiArea/ModifyKpiArea`, { return request<any>(`Track/ForewarningService/KpiArea/ModifyKpiArea`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -128,7 +128,7 @@ export async function postForewarningServiceKpiAreaModifyKpiAreaInfo(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/ForewarningService/KpiArea/ModifyKpiAreaInfo`, `Track/ForewarningService/KpiArea/ModifyKpiAreaInfo`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postWarningReturnEditReturnWarningRuleItem(
body: API.EditReturnWarningRuleItemInput, body: API.EditReturnWarningRuleItemInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>(`api/trackApi/Warning/Return/EditReturnWarningRuleItem`, { return request<any>(`Track/Warning/Return/EditReturnWarningRuleItem`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -23,7 +23,7 @@ export async function postWarningReturnGetPageReturnWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnWarningDetailsDtoPagedResult>( return request<API.ReturnWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Return/GetPageReturnWarningDetails`, `Track/Warning/Return/GetPageReturnWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -41,7 +41,7 @@ export async function postWarningReturnGetReturnMessageRecord(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnMessageRecordDto[]>( return request<API.ReturnMessageRecordDto[]>(
`api/trackApi/Warning/Return/GetReturnMessageRecord`, `Track/Warning/Return/GetReturnMessageRecord`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -59,7 +59,7 @@ export async function postWarningReturnGetReturnWarningRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.ReturnWarningRuleItemDto[]>( return request<API.ReturnWarningRuleItemDto[]>(
`api/trackApi/Warning/Return/GetReturnWarningRuleItem`, `Track/Warning/Return/GetReturnWarningRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -76,7 +76,7 @@ export async function postWarningReturnReturnPush(
body: API.ReturnPushInput, body: API.ReturnPushInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<string>(`api/trackApi/Warning/Return/ReturnPush`, { return request<string>(`Track/Warning/Return/ReturnPush`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -8,7 +8,7 @@ export async function postWarningTransportDeleteTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Transport/DeleteTransportWarningScene`, `Track/Warning/Transport/DeleteTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -26,7 +26,7 @@ export async function postWarningTransportEditTransportWarningSceneRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<any>( return request<any>(
`api/trackApi/Warning/Transport/EditTransportWarningSceneRuleItem`, `Track/Warning/Transport/EditTransportWarningSceneRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -44,7 +44,7 @@ export async function postWarningTransportGetPageTransportWarningDetails(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningDetailsDtoPagedResult>( return request<API.TransportWarningDetailsDtoPagedResult>(
`api/trackApi/Warning/Transport/GetPageTransportWarningDetails`, `Track/Warning/Transport/GetPageTransportWarningDetails`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -62,7 +62,7 @@ export async function postWarningTransportGetTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningSceneDto[]>( return request<API.TransportWarningSceneDto[]>(
`api/trackApi/Warning/Transport/GetTransportWarningScene`, `Track/Warning/Transport/GetTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -80,7 +80,7 @@ export async function postWarningTransportGetTransportWarningSceneRuleItem(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.TransportWarningSceneRuleItemDto[]>( return request<API.TransportWarningSceneRuleItemDto[]>(
`api/trackApi/Warning/Transport/GetTransportWarningSceneRuleItem`, `Track/Warning/Transport/GetTransportWarningSceneRuleItem`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {
@ -98,7 +98,7 @@ export async function postWarningTransportUpsertTransportWarningScene(
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>( return request<API.IdBaseDto>(
`api/trackApi/Warning/Transport/UpsertTransportWarningScene`, `Track/Warning/Transport/UpsertTransportWarningScene`,
{ {
method: 'POST', method: 'POST',
headers: { headers: {

View File

@ -7,7 +7,7 @@ export async function postWarningGetWarningRule(
body: API.GetWarningRuleInput, body: API.GetWarningRuleInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.WarningRuleDto[]>(`api/trackApi/Warning/GetWarningRule`, { return request<API.WarningRuleDto[]>(`Track/Warning/GetWarningRule`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -22,7 +22,7 @@ export async function postWarningUpdateEnabledStatus(
body: API.UpdateEnabledStatusInput, body: API.UpdateEnabledStatusInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/Warning/UpdateEnabledStatus`, { return request<API.IdBaseDto>(`Track/Warning/UpdateEnabledStatus`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',
@ -37,7 +37,7 @@ export async function postWarningUpsertWarningRule(
body: API.UpsertWarningRuleInput, body: API.UpsertWarningRuleInput,
options?: { [key: string]: any } options?: { [key: string]: any }
) { ) {
return request<API.IdBaseDto>(`api/trackApi/Warning/UpsertWarningRule`, { return request<API.IdBaseDto>(`Track/Warning/UpsertWarningRule`, {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json-patch+json', 'Content-Type': 'application/json-patch+json',

View File

@ -5,9 +5,7 @@ import { OpenAPI, clearAuthToken } from './index'
import { useRbacUserStore } from '@/store/modules/rbac-user' import { useRbacUserStore } from '@/store/modules/rbac-user'
// 创建自定义 axios 实例 // 创建自定义 axios 实例
// 注意:baseURL 设置为空,因为 OpenAPI.BASE 已经处理了 URL 构建 // baseURL 为空,URL 由 OpenAPI.BASE + path 构建;生产环境 OpenAPI.BASE = http://api.nanafa.com/admin
// 生产环境:OpenAPI.BASE = 'http://43.139.210.35:5281'
// 开发环境:OpenAPI.BASE = ''(通过 Vite 代理)
export const axiosInstance = axios.create({ export const axiosInstance = axios.create({
baseURL: '', // 始终为空,URL 由 OpenAPI.BASE + path 构建 baseURL: '', // 始终为空,URL 由 OpenAPI.BASE + path 构建
timeout: 30000, timeout: 30000,

View File

@ -10,19 +10,11 @@ export * from './generated'
import { OpenAPI } from './generated/core/OpenAPI' import { OpenAPI } from './generated/core/OpenAPI'
import { axiosInstance } from './axios-config' import { axiosInstance } from './axios-config'
// 设置基础 URL // 设置基础 URL:生产直连 http://api.nanafa.com/admin,开发走 Vite 代理
// 生产环境和开发环境都使用相对路径,通过 nginx/Vite 代理转发
// 生产环境:通过 nginx 代理 /rbac -> http://43.139.210.35:5281
// 开发环境:通过 Vite 代理 /rbac -> http://43.139.210.35:5281
OpenAPI.BASE = ''
// 调试信息
const isProduction = (import.meta as any).env?.MODE === 'production' || (import.meta as any).env?.PROD === true const isProduction = (import.meta as any).env?.MODE === 'production' || (import.meta as any).env?.PROD === true
if (isProduction) { OpenAPI.BASE = isProduction
console.log('[RBAC Config] Production mode: BASE =', OpenAPI.BASE, '(using nginx proxy)') ? (import.meta.env.VITE_API_ADMIN_URL || 'http://api.nanafa.com/admin')
} else { : ''
console.log('[RBAC Config] Development mode: BASE =', OpenAPI.BASE, '(using Vite proxy)')
}
// 认证 token 管理 // 认证 token 管理
export function setAuthToken(token: string) { export function setAuthToken(token: string) {

View File

@ -54,6 +54,8 @@
actionColumnWidth?: number; actionColumnWidth?: number;
// 是否显示复选框列 // 是否显示复选框列
showCheckboxColumn?: boolean; showCheckboxColumn?: boolean;
// 复选框列表头文案(空则表头为空)
checkboxColumnHeader?: string;
// 复选框变化回调 // 复选框变化回调
onCheckboxChange?: (row: any, checked: boolean, rowIndex: number) => void; onCheckboxChange?: (row: any, checked: boolean, rowIndex: number) => void;
// 操作列渲染器 // 操作列渲染器
@ -86,6 +88,7 @@
actionColumnPosition: 'start', actionColumnPosition: 'start',
actionColumnWidth: 60, actionColumnWidth: 60,
showCheckboxColumn: false, showCheckboxColumn: false,
checkboxColumnHeader: '',
readOnly: true, readOnly: true,
multiValueFields: () => [], multiValueFields: () => [],
height: undefined, height: undefined,
@ -108,6 +111,7 @@
}>(); }>();
const hotContainer = ref<HTMLElement | null>(null); const hotContainer = ref<HTMLElement | null>(null);
const containerRef = ref<HTMLElement | null>(null);
let hotInstance: Handsontable | null = null; let hotInstance: Handsontable | null = null;
const selectedRows = ref<any[]>([]); const selectedRows = ref<any[]>([]);
@ -173,7 +177,7 @@
// 复选框列 // 复选框列
if (props.showCheckboxColumn) { if (props.showCheckboxColumn) {
columns.push({ data: currentDataIndex, type: 'checkbox', readOnly: false, width: 60, className: 'htLeft' }); columns.push({ data: currentDataIndex, type: 'checkbox', readOnly: false, width: 60, className: 'htLeft' });
headerTexts.push(''); headerTexts.push(props.checkboxColumnHeader ?? '');
currentDataIndex++; currentDataIndex++;
} }
@ -266,6 +270,10 @@
}); });
try { try {
// 未传 height 时使用容器实际高度,使列表高度与容器一致
const containerH = containerRef.value?.clientHeight ?? 0;
const tableHeight = props.height ?? (containerH > 0 ? containerH : calculatedHeight.value);
const hotConfig: any = { const hotConfig: any = {
data: data, data: data,
columns: columns, columns: columns,
@ -273,7 +281,7 @@
rowHeaders: false, rowHeaders: false,
selectionMode: 'multiple', selectionMode: 'multiple',
width: '100%', width: '100%',
height: calculatedHeight.value, height: tableHeight,
licenseKey: 'non-commercial-and-evaluation', licenseKey: 'non-commercial-and-evaluation',
className: 'ht-theme-classic', className: 'ht-theme-classic',
language: 'zh-CN', language: 'zh-CN',
@ -1068,12 +1076,26 @@
} }
}; };
// 容器尺寸变化时同步表格高度,使列表高度与容器一致
let resizeObserver: ResizeObserver | null = null;
const setupResizeObserver = () => {
if (!containerRef.value) return;
resizeObserver = new ResizeObserver((entries) => {
const entry = entries[0];
if (entry && hotInstance && entry.contentRect.height > 0) {
hotInstance.updateSettings({ height: entry.contentRect.height });
}
});
resizeObserver.observe(containerRef.value);
};
onMounted(() => { onMounted(() => {
nextTick(() => { nextTick(() => {
// 确保样式已加载后再初始化 // 确保样式已加载后再初始化
setTimeout(() => { setTimeout(() => {
initHandsontable(); initHandsontable();
finalizeInit(); finalizeInit();
setupResizeObserver();
}, 200); }, 200);
}); });
@ -1085,6 +1107,12 @@
}); });
onUnmounted(() => { onUnmounted(() => {
if (resizeObserver && containerRef.value) {
try {
resizeObserver.unobserve(containerRef.value);
} catch (_) {}
resizeObserver = null;
}
// 停止定期刷新 // 停止定期刷新
stopDimensionRefresh(); stopDimensionRefresh();
@ -1112,7 +1140,7 @@
</script> </script>
<template> <template>
<div class="handsontable-pro-container"> <div ref="containerRef" class="handsontable-pro-container">
<div ref="hotContainer" class="handsontable-wrapper ht-theme-classic"></div> <div ref="hotContainer" class="handsontable-wrapper ht-theme-classic"></div>
</div> </div>
</template> </template>

View File

@ -9,7 +9,7 @@
<b><i class="fa fa-user mr-2"></i>个人中心</b> <b><i class="fa fa-user mr-2"></i>个人中心</b>
</a-doption> </a-doption>
<a-doption @click="() => onMenuClick({ key: 'settings' })"> <a-doption @click="() => onMenuClick({ key: 'settings' })">
<b><i class="fa fa-cog mr-2"></i>主题 / 页面配置</b> <b><i class="fa fa-cog mr-2"></i>页面配置</b>
</a-doption> </a-doption>
<a-doption @click="() => onMenuClick({ key: 'logout' })"> <a-doption @click="() => onMenuClick({ key: 'logout' })">
<b class="text-red-500"><i class="fa fa-sign-in mr-2"></i>退出登录</b> <b class="text-red-500"><i class="fa fa-sign-in mr-2"></i>退出登录</b>

View File

@ -10,7 +10,6 @@ import router from '@/router';
import { clearToken } from '@/utils/auth'; import { clearToken } from '@/utils/auth';
import { useUserStore } from '@/store'; import { useUserStore } from '@/store';
// 创建axios实例
const service: AxiosInstance = axios.create({ const service: AxiosInstance = axios.create({
baseURL: '/', baseURL: '/',
timeout: 10000, // 请求超时时间 timeout: 10000, // 请求超时时间
@ -22,7 +21,9 @@ const service: AxiosInstance = axios.create({
// 请求拦截器 // 请求拦截器
service.interceptors.request.use( service.interceptors.request.use(
(config: AxiosRequestConfig) => { (config: AxiosRequestConfig) => {
// 在发送请求之前做些什么 config.headers = config.headers ?? {};
// 生产:/api、/Track 走同源,由 nginx 代理到 api.nanafa.com,避免跨域 405;rbac 直连 admin
// 开发:Vite 代理 /api、/Track、/rbac
// 从 localStorage 获取 token // 从 localStorage 获取 token
const token = localStorage.getItem('token'); const token = localStorage.getItem('token');
if (token) { if (token) {

View File

@ -1854,11 +1854,41 @@
.header-actions { .header-actions {
display: flex; display: flex;
gap: 8px; gap: 2px;
flex-shrink: 0; flex-shrink: 0;
margin-left: auto; margin-left: auto;
display: flex; }
gap: 8px;
/* 下游接口中间容器:刷新、新增按钮无背景无框,黑色纯符号 */
.middle-content.nav-panel .header-actions .action-icon-btn.refresh-btn {
color: #000 !important;
background-color: transparent !important;
border-color: transparent !important;
&:hover:not(:disabled) {
color: #262626 !important;
background-color: transparent !important;
border-color: transparent !important;
}
&:disabled {
color: #d9d9d9 !important;
background-color: transparent !important;
border-color: transparent !important;
}
}
.middle-content.nav-panel .header-actions .action-icon-btn.add-btn {
color: #000 !important;
background-color: transparent !important;
border-color: transparent !important;
&:hover:not(:disabled) {
color: #262626 !important;
background-color: transparent !important;
border-color: transparent !important;
}
&:disabled {
color: #d9d9d9 !important;
background-color: transparent !important;
border-color: transparent !important;
}
} }
.content-body { .content-body {

View File

@ -1686,23 +1686,24 @@ import { IconClose, IconEdit, IconPlus, IconSearch, IconMore, IconMinus, IconRef
} }
.mapping-search-box { .mapping-search-box {
flex: 1; flex: 1 1 calc(100% - 22px);
padding: 0; padding: 0;
margin-right: 8px; margin-right: 4px;
box-sizing: border-box; box-sizing: border-box;
min-width: 0;
} }
.mapping-search-box :deep(.arco-input-wrapper) { .mapping-search-box :deep(.arco-input-wrapper) {
background: #fff !important; background: #fff !important;
border: 1px solid var(--color-border-2) !important; border: 1px solid var(--color-border-2) !important;
border-radius: 4px !important; border-radius: 24px !important;
height: auto !important; height: auto !important;
} }
.mapping-search-box :deep(.arco-input) { .mapping-search-box :deep(.arco-input) {
background: #fff !important; background: #fff !important;
border: none !important; border: none !important;
border-radius: 4px !important; border-radius: 24px !important;
color: var(--color-text-1) !important; color: var(--color-text-1) !important;
height: auto !important; height: auto !important;
} }
@ -1863,19 +1864,40 @@ import { IconClose, IconEdit, IconPlus, IconSearch, IconMore, IconMinus, IconRef
.header-actions { .header-actions {
display: flex; display: flex;
gap: 8px; gap: 0px;
flex-shrink: 0; flex-shrink: 0;
margin-left: auto; margin-left: auto;
} }
// 映射列表区域的刷新按钮改为灰色 /* 映射列表区域:刷新、新增按钮为黑色纯符号(无背景无框),两按钮紧挨 */
.middle-content.nav-panel .header-actions .refresh-btn { .middle-content.nav-panel .header-actions .action-icon-btn.refresh-btn {
color: #8c8c8c !important; color: #000 !important;
&:hover { background-color: transparent !important;
color: #666 !important; border-color: transparent !important;
&:hover:not(:disabled) {
color: #262626 !important;
background-color: transparent !important;
border-color: transparent !important;
} }
&:disabled { &:disabled {
color: #d9d9d9 !important; color: #d9d9d9 !important;
background-color: transparent !important;
border-color: transparent !important;
}
}
.middle-content.nav-panel .header-actions .action-icon-btn.add-btn {
color: #000 !important;
background-color: transparent !important;
border-color: transparent !important;
&:hover:not(:disabled) {
color: #262626 !important;
background-color: transparent !important;
border-color: transparent !important;
}
&:disabled {
color: #d9d9d9 !important;
background-color: transparent !important;
border-color: transparent !important;
} }
} }

View File

@ -1361,28 +1361,29 @@
</div> </div>
</div> </div>
</div> </div>
<!-- Handsontable 表格 --> <!-- 列表区域:占满剩余高度,滚动条高度正确 -->
<HandsontablePro <div class="list-wrap">
ref="handsontableRef" <HandsontablePro
:columns="columns" ref="handsontableRef"
:data="processedTableData" :columns="columns"
:total="totalCount" :data="processedTableData"
:current-page="currentPage" :total="totalCount"
:page-size="pageSize" :current-page="currentPage"
:search-params="searchParams" :page-size="pageSize"
:show-checkbox-column="true" :search-params="searchParams"
:show-action-column="true" :show-checkbox-column="false"
:action-column-position="'end'" :show-action-column="true"
:action-renderer="actionRenderer" :action-column-position="'start'"
:multi-value-fields="['orderNos']" :action-renderer="actionRenderer"
:custom-cell-renderer="customCellRenderer" :multi-value-fields="['orderNos']"
:read-only="false" :custom-cell-renderer="customCellRenderer"
@checkbox-change="handleCheckboxChange" :read-only="false"
@action-click="handleActionClick" @action-click="handleActionClick"
@search="handleHeaderSearch" @search="handleHeaderSearch"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
/> />
</div>
<!-- 隐藏原始表格 --> <!-- 隐藏原始表格 -->
<TablePro ref="tableRef" v-bind="tableProps" style="display: none;"> <TablePro ref="tableRef" v-bind="tableProps" style="display: none;">
@ -1523,11 +1524,12 @@
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
/* 与左侧 tab 容器高度一致:填满 content-area(和 vertical-tabs 同高) */
.xxx-container { .xxx-container {
padding: 16px; padding: 16px;
background-color: #fff; background-color: #fff;
height: calc(100vh - 86px - 100px); // 减去导航栏和tab高度 height: 100%;
max-height: calc(100vh - 86px - 100px); min-height: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
@ -1535,7 +1537,27 @@
flex-direction: column; flex-direction: column;
} }
/* 列表区域:占满工具栏下方剩余高度,滚动条高度与容器一致 */
.list-wrap {
flex: 1;
min-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
.list-wrap :deep(.handsontable-pro-container) {
flex: 1;
min-height: 0;
height: 100%;
}
.list-wrap :deep(.handsontable-wrapper) {
height: 100%;
}
.table-toolbar { .table-toolbar {
flex-shrink: 0;
margin-bottom: 8px; margin-bottom: 8px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;

View File

@ -177,7 +177,7 @@
} }
// 跳转页码 // 跳转页码
const jumpPage = ref('1'); const jumpPage = ref(1);
function handleJumpPage() { function handleJumpPage() {
const page = Number(jumpPage.value); const page = Number(jumpPage.value);
if (page > 0 && page <= Math.ceil(totalCount.value / pageSize.value)) { if (page > 0 && page <= Math.ceil(totalCount.value / pageSize.value)) {
@ -314,7 +314,7 @@
<template> <template>
<div class="xxx-container" style="background-color: #fff;"> <div class="xxx-container" style="background-color: #fff;">
<!-- 表格操作按钮 --> <!-- 表格操作按钮和分页控制(与运输时效 tab 一致) -->
<div class="table-toolbar"> <div class="table-toolbar">
<div class="toolbar-left"> <div class="toolbar-left">
<div class="custom-buttons"> <div class="custom-buttons">
@ -329,26 +329,28 @@
</div> </div>
<div class="toolbar-right"> <div class="toolbar-right">
<div class="pagination-controls"> <div class="pagination-controls">
<span class="total-records">共{{ totalCount }}条记录</span> <span class="total-records">共 {{ totalCount }} 条记录</span>
<a-button <a-button
size="small" type="text"
:disabled="currentPage <= 1" size="small"
:disabled="currentPage === 1"
@click="handlePageChange(currentPage - 1)" @click="handlePageChange(currentPage - 1)"
> >
&lt; 上一页
</a-button> </a-button>
<span class="current-page">{{ currentPage }}</span> <span class="current-page">{{ currentPage }}</span>
<a-button <a-button
size="small" type="text"
:disabled="currentPage >= Math.ceil(totalCount / pageSize)" size="small"
:disabled="currentPage * pageSize >= totalCount"
@click="handlePageChange(currentPage + 1)" @click="handlePageChange(currentPage + 1)"
> >
&gt; 下一页
</a-button> </a-button>
<a-select <a-select
v-model="pageSize" v-model="pageSize"
size="small" size="small"
class="page-size-select" :style="{ width: '110px' }"
@change="handlePageSizeChange" @change="handlePageSizeChange"
> >
<a-option :value="300">300</a-option> <a-option :value="300">300</a-option>
@ -358,33 +360,35 @@
</a-select> </a-select>
<span class="page-size-text">条/页</span> <span class="page-size-text">条/页</span>
<span class="go-to-text">前往</span> <span class="go-to-text">前往</span>
<a-input <a-input-number
v-model="jumpPage" v-model="jumpPage"
size="small" size="small"
class="jump-input" :style="{ width: '60px' }"
@keyup.enter="handleJumpPage" @keyup.enter="handleJumpPage"
/> />
<span class="page-text">页</span> <span class="page-text">页</span>
</div> </div>
</div> </div>
</div> </div>
<!-- Handsontable 表格 --> <!-- 列表区域:占满剩余高度,滚动条高度正确 -->
<HandsontablePro <div class="list-wrap">
ref="handsontableRef" <HandsontablePro
:columns="columns" ref="handsontableRef"
:data="processedTableData" :columns="columns"
:total="totalCount" :data="processedTableData"
:current-page="currentPage" :total="totalCount"
:page-size="pageSize" :current-page="currentPage"
:search-params="searchParams" :page-size="pageSize"
:show-action-column="true" :search-params="searchParams"
:multi-value-fields="['orderNos']" :show-action-column="true"
:custom-cell-renderer="customCellRenderer" :multi-value-fields="['orderNos']"
@action-click="onViewPushRecord" :custom-cell-renderer="customCellRenderer"
@search="handleHeaderSearch" @action-click="onViewPushRecord"
@selection-change="handleSelectionChange" @search="handleHeaderSearch"
/> @selection-change="handleSelectionChange"
/>
</div>
<!-- 隐藏原始表格 --> <!-- 隐藏原始表格 -->
<TablePro ref="tableRef" v-bind="tableProps" style="display: none;"> <TablePro ref="tableRef" v-bind="tableProps" style="display: none;">
@ -428,144 +432,149 @@
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
/* 与左侧 tab 容器高度一致:填满 content-area(和 vertical-tabs 同高) */
.xxx-container { .xxx-container {
padding: 0; padding: 16px;
background-color: #fff; background-color: #fff;
height: 100%; height: 100%;
min-height: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
/* 列表区域:占满工具栏下方剩余高度,滚动条高度与容器一致 */
.list-wrap {
flex: 1;
min-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
.list-wrap :deep(.handsontable-pro-container) {
flex: 1;
min-height: 0;
height: 100%;
}
.list-wrap :deep(.handsontable-wrapper) {
height: 100%;
}
.table-toolbar { .table-toolbar {
flex-shrink: 0;
margin-bottom: 8px; margin-bottom: 8px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
.toolbar-left {
flex: 1;
.custom-buttons {
display: flex;
gap: 12px;
align-items: center;
.arco-btn {
border-radius: 20px;
font-weight: 500;
transition: all 0.3s ease;
border: 2px solid;
position: relative;
overflow: hidden;
padding: 8px 16px;
height: auto;
// 所有按钮 - 深青色
&.btn-push {
background: var(--app-primary-color);
border-color: var(--app-primary-color);
color: #ffffff;
&:hover:not(:disabled) {
background: #2A7F7F;
border-color: #2A7F7F;
}
&:active:not(:disabled) {
background: #257272;
border-color: #257272;
}
}
// 禁用状态
&:disabled {
opacity: 1;
cursor: not-allowed;
background: rgba(169, 169, 169, 0.8) !important;
border-color: rgba(169, 169, 169, 0.8) !important;
color: #ffffff !important;
transform: none !important;
box-shadow: none !important;
}
}
}
}
} }
.toolbar-right { .toolbar-left {
.pagination-controls { flex: 1;
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
flex-wrap: nowrap;
.total-records,
.go-to-text,
.page-size-text,
.page-text {
font-size: 12px;
color: #4e5969;
white-space: nowrap;
}
.current-page {
font-size: 12px;
font-weight: 500;
color: #1d2129;
white-space: nowrap;
}
.arco-btn-size-small {
padding: 0 8px;
height: 24px;
min-width: 24px;
border-radius: 4px;
color: #4e5969;
border: 1px solid #e5e6eb;
background-color: #fff;
&:hover {
background-color: #f2f3f5;
}
&:disabled {
cursor: not-allowed;
opacity: 0.6;
}
}
.arco-select-size-small {
.arco-select-view {
height: 24px;
line-height: 24px;
font-size: 12px;
}
}
.arco-input-size-small {
.arco-input-wrapper {
height: 24px;
line-height: 24px;
font-size: 12px;
}
}
}
} }
.page-size-select { .custom-buttons {
width: 110px; display: flex;
} gap: 12px;
align-items: center;
.jump-input {
width: 60px;
} }
// 表格滚动面板样式 .table-toolbar .arco-btn {
border-radius: 20px;
font-weight: 500;
transition: all 0.3s ease;
border: 2px solid;
position: relative;
overflow: hidden;
padding: 8px 16px;
height: auto;
}
.table-toolbar .arco-btn.btn-push {
background: var(--app-primary-color);
border-color: var(--app-primary-color);
color: #ffffff;
}
.table-toolbar .arco-btn.btn-push:hover:not(:disabled) {
background: #2A7F7F;
border-color: #2A7F7F;
}
.table-toolbar .arco-btn.btn-push:active:not(:disabled) {
background: #257272;
border-color: #257272;
}
.table-toolbar .arco-btn:disabled {
opacity: 1;
cursor: not-allowed;
background: rgba(169, 169, 169, 0.8) !important;
border-color: rgba(169, 169, 169, 0.8) !important;
color: #ffffff !important;
transform: none !important;
box-shadow: none !important;
}
.toolbar-right .pagination-controls {
display: flex;
align-items: center;
gap: 8px;
white-space: nowrap;
flex-wrap: nowrap;
}
.toolbar-right .total-records,
.toolbar-right .go-to-text,
.toolbar-right .page-size-text,
.toolbar-right .page-text {
font-size: 12px;
color: #4e5969;
white-space: nowrap;
}
.toolbar-right .current-page {
font-size: 12px;
font-weight: 500;
color: #1d2129;
white-space: nowrap;
}
.toolbar-right .arco-btn-size-small {
padding: 0 8px;
height: 24px;
min-width: 24px;
border-radius: 4px;
color: #4e5969;
border: 1px solid #e5e6eb;
background-color: #fff;
}
.toolbar-right .arco-btn-size-small:hover {
background-color: #f2f3f5;
}
.toolbar-right .arco-btn-size-small:disabled {
cursor: not-allowed;
opacity: 0.6;
}
.toolbar-right .arco-select-size-small .arco-select-view {
height: 24px;
line-height: 24px;
font-size: 12px;
}
.toolbar-right .arco-input-number-size-small .arco-input-wrapper {
height: 24px;
line-height: 24px;
font-size: 12px;
}
// 表格滚动面板样式(历史保留)
.table-wrapper { .table-wrapper {
border: 1px solid #e5e6eb; border: 1px solid #e5e6eb;
border-radius: 4px; border-radius: 4px;

View File

@ -433,23 +433,25 @@
</div> </div>
</div> </div>
</div> </div>
<!-- Handsontable 表格 --> <!-- 列表区域:占满剩余高度,滚动条高度正确 -->
<HandsontablePro <div class="list-wrap">
ref="handsontableRef" <HandsontablePro
:columns="columns" ref="handsontableRef"
:data="processedTableData" :columns="columns"
:total="totalCount" :data="processedTableData"
:current-page="currentPage" :total="totalCount"
:page-size="pageSize" :current-page="currentPage"
:search-params="searchParams" :page-size="pageSize"
:show-action-column="true" :search-params="searchParams"
:multi-value-fields="['orderNos']" :show-action-column="true"
:custom-cell-renderer="customCellRenderer" :multi-value-fields="['orderNos']"
@action-click="() => {}" :custom-cell-renderer="customCellRenderer"
@search="handleHeaderSearch" @action-click="() => {}"
@selection-change="handleSelectionChange" @search="handleHeaderSearch"
/> @selection-change="handleSelectionChange"
/>
</div>
<!-- 隐藏原始表格 --> <!-- 隐藏原始表格 -->
<TablePro ref="tableRef" v-bind="tableProps" style="display: none;"> <TablePro ref="tableRef" v-bind="tableProps" style="display: none;">
@ -515,11 +517,12 @@
</template> </template>
<style scoped lang="less"> <style scoped lang="less">
/* 与左侧 tab 容器高度一致:填满 content-area(和 vertical-tabs 同高) */
.xxx-container { .xxx-container {
padding: 16px; padding: 16px;
background-color: #fff; background-color: #fff;
height: calc(100vh - 86px - 100px); // 减去导航栏和tab高度 height: 100%;
max-height: calc(100vh - 86px - 100px); min-height: 0;
box-sizing: border-box; box-sizing: border-box;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
@ -527,7 +530,27 @@
flex-direction: column; flex-direction: column;
} }
/* 列表区域:占满工具栏下方剩余高度,滚动条高度与容器一致 */
.list-wrap {
flex: 1;
min-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
.list-wrap :deep(.handsontable-pro-container) {
flex: 1;
min-height: 0;
height: 100%;
}
.list-wrap :deep(.handsontable-wrapper) {
height: 100%;
}
.table-toolbar { .table-toolbar {
flex-shrink: 0;
margin-bottom: 8px; margin-bottom: 8px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;

View File

@ -105,6 +105,7 @@
.content-area { .content-area {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
min-height: 0;
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;

View File

@ -19,10 +19,9 @@ export default defineConfig({
// 添加中间件,在代理之前拦截前端路由 // 添加中间件,在代理之前拦截前端路由
middlewareMode: false, middlewareMode: false,
proxy: { proxy: {
// RBAC 权限管理服务代理 - http://43.139.210.35:5281 // 权限(admin)43.139.210.35:5281 -> http://api.nanafa.com/admin(路径保持 /rbac/xxx -> .../admin/rbac/xxx)
// 注意:后端 API 路径包含 /rbac 前缀,所以不需要 rewrite
'/rbac': { '/rbac': {
target: 'http://43.139.210.35:5281', target: 'http://api.nanafa.com/admin',
changeOrigin: true, changeOrigin: true,
secure: false, secure: false,
configure: (proxy, options) => { configure: (proxy, options) => {
@ -39,34 +38,27 @@ export default defineConfig({
}); });
}, },
}, },
// 对应 nginx: location /api/trackApi -> http://43.139.210.35:8889 // 轨迹(track)43.139.210.35:8889 -> http://api.nanafa.com/track,路径与 rbac、api 一致:/Track/xxx
'/api/trackApi': { '/Track': {
target: 'http://43.139.210.35:8889', target: 'http://api.nanafa.com',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api\/trackApi/, ''), rewrite: (path) => '/track' + path,
configure: (proxy, options) => { configure: (proxy, options) => {
proxy.on('error', (err, req, res) => { proxy.on('error', (err, req, res) => {
console.log('proxy error', err); console.log('proxy error', err);
}); });
proxy.on('proxyReq', (proxyReq, req, res) => { proxy.on('proxyReq', (proxyReq, req, res) => {
console.log('[trackApi-8889] Sending Request to the Target:', req.method, req.url); console.log('[Track] Sending Request:', req.method, req.url);
}); });
proxy.on('proxyRes', (proxyRes, req, res) => { proxy.on('proxyRes', (proxyRes, req, res) => {
console.log( console.log('[Track] Received Response:', proxyRes.statusCode, req.url);
'[trackApi-8889] Received Response from the Target:',
proxyRes.statusCode,
req.url
);
}); });
}, },
}, },
// 对应 nginx: location /api -> http://43.139.210.35:8888 // API(itfx)43.139.210.35:8888 -> http://api.nanafa.com/itfx
// 使用正则表达式匹配,排除前端路由路径 // 使用正则表达式匹配,排除前端路由路径
// 只代理真正的 API 请求,不代理前端路由
// 排除所有驼峰命名的前端路由(包含大写字母的路径)
'^/api/(?!upstreamInterface|upstreamInterfaceConfig|upstreamInterfaceConfigEdit|downstreamInterface|downstreamInterface/newPort|appList|appList/createApplication|requestLog|callStatistics|apiDebugger|trackApi)': { '^/api/(?!upstreamInterface|upstreamInterfaceConfig|upstreamInterfaceConfigEdit|downstreamInterface|downstreamInterface/newPort|appList|appList/createApplication|requestLog|callStatistics|apiDebugger|trackApi)': {
target: 'http://43.139.210.35:8888', target: 'http://api.nanafa.com/itfx',
changeOrigin: true, changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''), rewrite: (path) => path.replace(/^\/api/, ''),
timeout: 30000, timeout: 30000,