diff --git a/nginx-inner.conf b/nginx-inner.conf index 7e5d6e20..c512a459 100644 --- a/nginx-inner.conf +++ b/nginx-inner.conf @@ -1,5 +1,5 @@ server { - listen 8088; + listen 80; server_name localhost; # 关键:允许上传最大100MB @@ -23,7 +23,7 @@ server { # 如果 inner 环境的后端服务名不同,比如叫 besure-server-inner # 就把下面的 proxy_pass 改成对应的服务名或IP location /admin-api/ { - proxy_pass http://besure_server_inner:48081; # 👈 这里改! + proxy_pass http://47.116.4.53:48081; # 👈 这里改! proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -35,7 +35,7 @@ server { # 其他路径保持不变 location /api/ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -46,7 +46,7 @@ server { } location /jmreport/ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -57,7 +57,7 @@ server { } location /v3/api-docs/ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -68,7 +68,7 @@ server { } location /doc.html { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; @@ -79,21 +79,21 @@ server { } location /swagger-ui/ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 处理Swagger静态资源 location /webjars/ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # 处理API文档JSON文件 location ~ /v3/api-docs/.*\.json$ { - proxy_pass http://besure_server_inner:48081; # 👈 原生产后端 + proxy_pass http://47.116.4.53:48081; # 👈 原生产后端 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } diff --git a/nginx-ypk.conf b/nginx-ypk.conf new file mode 100644 index 00000000..1ce6bdec --- /dev/null +++ b/nginx-ypk.conf @@ -0,0 +1,112 @@ +server { + listen 8088; + server_name localhost; + + # 关键:允许上传最大100MB + client_max_body_size 100m; + + # 超时时间 + proxy_connect_timeout 300s; + proxy_send_timeout 300s; + proxy_read_timeout 300s; + client_body_timeout 300s; + send_timeout 300s; + + # 防止大文件上传被缓冲卡死 + proxy_request_buffering off; + proxy_buffering off; + # Docker DNS resolver to enable runtime upstream resolution, preventing host not found at startup + resolver 127.0.0.11 valid=10s; + + # ========== 内网环境特有配置 ========== + + # 如果 inner 环境的后端服务名不同,比如叫 besure-server-inner + # 就把下面的 proxy_pass 改成对应的服务名或IP + location /admin-api/ { + proxy_pass http://besure_server_ypk:48081; # 👈 这里改! + proxy_set_header Host $host; + 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_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + # 其他路径保持不变 + location /api/ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + 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_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /jmreport/ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + 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_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /v3/api-docs/ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + 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_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /doc.html { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + 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_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /swagger-ui/ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # 处理Swagger静态资源 + location /webjars/ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # 处理API文档JSON文件 + location ~ /v3/api-docs/.*\.json$ { + proxy_pass http://besure_server_ypk:48081; # 👈 原生产后端 + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + } + + # 前端静态资源 + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/package.json b/package.json index 3dfd5c99..8dcf9a81 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "build:stage": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode stage", "build:prod": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode prod", "build:inner": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode inner", + "build:ypk": "node --max_old_space_size=8192 ./node_modules/vite/bin/vite.js build --mode ypk", "serve:dev": "vite preview --mode dev", "serve:prod": "vite preview --mode prod", "preview": "pnpm build:local && vite preview", diff --git a/src/views/mes/tasksummary/components/TaskScheduleDialog.vue b/src/views/mes/tasksummary/components/TaskScheduleDialog.vue index e0e24bd4..f7011498 100644 --- a/src/views/mes/tasksummary/components/TaskScheduleDialog.vue +++ b/src/views/mes/tasksummary/components/TaskScheduleDialog.vue @@ -252,8 +252,8 @@ const currentDeviceRelationRow = ref() const currentProductData = ref() const selectedDeviceRows = ref([]) const deviceRelationForm = reactive({ - productId: undefined as number | undefined, - devices: [] as { id: number; name: string }[] + productId: undefined as string | undefined, + devices: [] as { id: string; name: string }[] }) const deviceColumns = computed(() => [ @@ -304,7 +304,7 @@ const taskDetailRequestMap = new Map>() const currentDetailRequestId = ref(0) const taskTableBusy = computed(() => taskLoading.value || taskSelectionLoading.value) -const getRelationName = (item: Record, nameKeys: string[], fallbackPrefix: string, id: number) => { +const getRelationName = (item: Record, nameKeys: string[], fallbackPrefix: string, id: string) => { for (const key of nameKeys) { const value = item[key] if (value !== undefined && value !== null && String(value).trim() !== '') { @@ -318,11 +318,11 @@ const normalizeRelationList = ( fallbackRows: any[] | undefined, nameKeys: string[], fallbackPrefix: string -): { id: number; name: string }[] => { - const fallbackMap = new Map() +): { id: string; name: string }[] => { + const fallbackMap = new Map() ;(fallbackRows || []).forEach((row) => { - const id = Number(row?.id) - if (!Number.isFinite(id)) return + const id = String(row?.id) + if (!id || id === 'undefined' || id === 'null') return fallbackMap.set(id, getRelationName(row, nameKeys, fallbackPrefix, id)) }) const parseArray = (source: unknown): any[] => { @@ -342,23 +342,23 @@ const normalizeRelationList = ( return parseArray(value) .map((item) => { if (typeof item === 'object' && item !== null) { - const id = Number((item as any).id) - if (!Number.isFinite(id)) return undefined + const id = String((item as any).id) + if (!id || id === 'undefined' || id === 'null') return undefined return { id, name: getRelationName(item as any, nameKeys, fallbackPrefix, id) } } - const id = Number(item) - if (!Number.isFinite(id)) return undefined + const id = String(item) + if (!id || id === 'undefined' || id === 'null') return undefined return { id, name: fallbackMap.get(id) || `${fallbackPrefix}ID:${id}` } }) - .filter((item): item is { id: number; name: string } => Boolean(item)) + .filter((item): item is { id: string; name: string } => Boolean(item)) } -const toDeviceRows = (devices: { id: number; name: string }[]) => { +const toDeviceRows = (devices: { id: string; name: string }[]) => { return devices.map((item) => ({ id: item.id, deviceName: item.name, @@ -625,7 +625,7 @@ const openDeviceRelationDialog = async (row: any) => { deviceRelationLoading.value = true selectedDeviceRows.value = [] try { - const productData = await ProductApi.getProduct(Number(row.productId)) + const productData = await ProductApi.getProduct(String(row.productId)) currentProductData.value = productData const devices = normalizeRelationList( (productData as any).devices ?? (productData as any).deviceIds, @@ -633,7 +633,7 @@ const openDeviceRelationDialog = async (row: any) => { ['name', 'deviceName', 'code'], t('ProductionPlan.TaskSummary.deviceColumnName') ) - deviceRelationForm.productId = Number(row.productId) + deviceRelationForm.productId = String(row.productId) deviceRelationForm.devices = devices selectedDeviceRows.value = toDeviceRows(devices) } finally { @@ -656,7 +656,7 @@ const handleDeviceSelectConfirm = (payload: { ids: (number | string)[]; rows: an name: item.deviceName || item.name || item.code || `${t('ProductionPlan.TaskSummary.deviceColumnName')}ID:${id}` } }) - .filter((item): item is { id: number; name: string } => Boolean(item)) + .filter((item): item is { id: string; name: string } => Boolean(item)) selectedDeviceRows.value = payload.rows } const refreshDetailListAfterDeviceSaved = async () => {