diff --git a/backend/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod-local.yml b/backend/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod-local.yml
new file mode 100644
index 00000000..fdfc034f
--- /dev/null
+++ b/backend/ruoyi-extend/ruoyi-monitor-admin/src/main/resources/application-prod-local.yml
@@ -0,0 +1,48 @@
+server:
+ port: 9090
+spring:
+ application:
+ name: ruoyi-monitor-admin
+ profiles:
+ active: @profiles.active@
+
+logging:
+ config: classpath:logback-plus.xml
+
+--- # 监控中心服务端配置
+spring:
+ security:
+ user:
+ name: @monitor.username@
+ password: @monitor.password@
+ boot:
+ admin:
+ ui:
+ title: RuoYi-Vue-Plus服务监控中心
+ context-path: /admin
+
+--- # Actuator 监控端点的配置项
+management:
+ endpoints:
+ web:
+ exposure:
+ include: '*'
+ endpoint:
+ health:
+ show-details: ALWAYS
+ logfile:
+ external-file: ./logs/ruoyi-monitor-admin.log
+
+--- # 监控配置
+spring.boot.admin.client:
+ # 增加客户端开关
+ enabled: true
+ # 设置 Spring Boot Admin Server 地址
+ url: http://47.121.125.41:9090/admin
+ instance:
+ service-host-type: IP
+ metadata:
+ username: ${spring.boot.admin.client.username}
+ userpassword: ${spring.boot.admin.client.password}
+ username: @monitor.username@
+ password: @monitor.password@
diff --git a/web/.env.development b/web/.env.development
index 0602545f..466dcac7 100644
--- a/web/.env.development
+++ b/web/.env.development
@@ -1,20 +1,23 @@
# 页面标题
VITE_APP_TITLE = 杭州第一技师学院智慧校园管理系统
-# 开发环境配置
-VITE_APP_ENV = 'development'
-
-# 开发环境
-VITE_APP_BASE_API = '/dev-api'
+# 生产环境配置
+VITE_APP_ENV = 'production'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/'
# 监控地址
-VITE_APP_MONITOR_ADMIN = 'http://localhost:9090/admin/applications'
+VITE_APP_MONITOR_ADMIN = '/admin/applications'
# SnailJob 控制台地址
-VITE_APP_SNAILJOB_ADMIN = 'http://localhost:8800/snail-job'
+VITE_APP_SNAILJOB_ADMIN = '/snail-job'
+
+# 生产环境
+VITE_APP_BASE_API = '/prod-api'
+
+# 是否在打包时开启压缩,支持 gzip 和 brotli
+VITE_BUILD_COMPRESS = gzip
VITE_APP_PORT = 80
diff --git a/web/public/favicon.ico b/web/public/favicon.ico
new file mode 100644
index 00000000..531093ae
Binary files /dev/null and b/web/public/favicon.ico differ
diff --git a/web/出国申请详情弹窗字段顺序调整说明.md b/web/出国申请详情弹窗字段顺序调整说明.md
deleted file mode 100644
index 7938165b..00000000
--- a/web/出国申请详情弹窗字段顺序调整说明.md
+++ /dev/null
@@ -1,424 +0,0 @@
-# 出国申请详情弹窗字段顺序调整说明
-
-**调整时间**: 2025-10-10
-**调整范围**: 出国申请详情弹窗字段显示顺序
-**状态**: ✅ 已完成
-
----
-
-## 📋 调整需求
-
-### 第一批调整
-将"申领证件名称"字段调整到"职务"字段后面,优化字段显示顺序。
-
-### 第二批调整
-1. **前往国家字段**:调整到证件号码字段后面(同一行)
-2. **探望对象关系字段**:调整到出境事由后面(同一行)
-3. **出国天数字段**:调整到行程安排后面(同一行)
-
----
-
-## ✅ 修改文件清单
-
-### 1. 出国申请管理主页面
-
-**文件**: `web/src/views/rs/overseas/index.vue`
-
-#### 1.1 出国申请详情弹窗(第823-831行)
-
-**调整前**:
-```vue
-{{ state.viewData.department || '-' }}
-{{ state.viewData.professionalTitle || '-' }}
-
-{{ state.viewData.position || '-' }}
-
-
-{{ state.viewData.documentName || '-' }}
-{{ state.viewData.documentNumber || '-' }}
-```
-
-**调整后**:
-```vue
-{{ state.viewData.department || '-' }}
-{{ state.viewData.professionalTitle || '-' }}
-
-{{ state.viewData.position || '-' }}
-{{ state.viewData.documentName || '-' }}
-
-
-{{ state.viewData.documentNumber || '-' }}
-```
-
-#### 1.2 出国记录详情弹窗(第879-887行)
-
-**调整前**:
-```vue
-{{ state.viewData.department || '-' }}
-{{ (state.viewData as OverseasRecordVO).professionalTitle || '-' }}
-
-{{ state.viewData.position || '-' }}
-
-
-{{ (state.viewData as OverseasRecordVO).documentName || '-' }}
-{{ (state.viewData as OverseasRecordVO).documentNumber || '-' }}
-```
-
-**调整后**:
-```vue
-{{ state.viewData.department || '-' }}
-{{ (state.viewData as OverseasRecordVO).professionalTitle || '-' }}
-
-{{ state.viewData.position || '-' }}
-{{ (state.viewData as OverseasRecordVO).documentName || '-' }}
-
-
-{{ (state.viewData as OverseasRecordVO).documentNumber || '-' }}
-```
-
----
-
-### 2. 出国申请审批页面
-
-**文件**: `web/src/views/rs/overseas/approval.vue`(第249-257行)
-
-**调整前**:
-```vue
-{{ viewData.department || '-' }}
-{{ viewData.professionalTitle || '-' }}
-
-{{ viewData.position || '-' }}
-
-
-{{ viewData.documentName || '-' }}
-{{ viewData.documentNumber || '-' }}
-```
-
-**调整后**:
-```vue
-{{ viewData.department || '-' }}
-{{ viewData.professionalTitle || '-' }}
-
-{{ viewData.position || '-' }}
-{{ viewData.documentName || '-' }}
-
-
-{{ viewData.documentNumber || '-' }}
-```
-
----
-
-## 🎯 调整说明
-
-### 字段布局变化
-
-#### 第一批调整 - 基本信息区域
-
-**调整前**:
-```
-┌─────────────┬─────────────┐
-│ 现工作部门 │ 职称 │
-├─────────────┴─────────────┤
-│ 职务 (占两列) │ ← 独占一行
-├─────────────┬─────────────┤
-│ 申领证件名称│ 证件号码 │
-└─────────────┴─────────────┘
-```
-
-**调整后**:
-```
-┌─────────────┬─────────────┐
-│ 现工作部门 │ 职称 │
-├─────────────┼─────────────┤
-│ 职务 │ 申领证件名称│ ← 申领证件名称移到职务右侧
-├─────────────┴─────────────┤
-│ 证件号码 (占两列) │
-└─────────────────────────────┘
-```
-
-#### 第二批调整 - 出境信息区域
-
-**调整前**:
-```
-├─────────────┴─────────────┤
-│ 证件号码 (占两列) │
-├─────────────┬─────────────┤
-│ 前往国家 │ 出境事由 │
-├─────────────┴─────────────┤
-│ 探望对象关系 (占两列) │ ← 条件显示
-├─────────────┴─────────────┤
-│ 行程安排 (占两列) │
-├─────────────┴─────────────┤
-│ 出国天数 (占两列) │
-├─────────────┬─────────────┤
-│ 出发日期 │ 返回日期 │
-└─────────────┴─────────────┘
-```
-
-**调整后**:
-```
-├─────────────┬─────────────┤
-│ 证件号码 │ 前往国家 │ ← 前往国家移到证件号码右侧
-├─────────────┼─────────────┤
-│ 出境事由 │ 探望对象关系│ ← 探望对象关系移到出境事由右侧
-├─────────────┴─────────────┤
-│ 行程安排 (占两列) │
-├─────────────┬─────────────┤
-│ 出国天数 │ 备注 │ ← 出国天数移到行程安排后、备注同行
-├─────────────┼─────────────┤
-│ 出发日期 │ 返回日期 │
-└─────────────┴─────────────┘
-```
-
-### 核心改动点
-
-#### 第一批调整 - 基本信息字段
-
-1. **职务字段**:
- - 调整前:`:span="2"` (占据两列,独占一行)
- - 调整后:默认占一列,与"申领证件名称"同行
-
-2. **申领证件名称字段**:
- - 调整前:位于职务下方的新行
- - 调整后:位于职务同行右侧
-
-3. **证件号码字段**:
- - 调整前:与"申领证件名称"同行
- - 调整后:`:span="2"` (独占一行) → 后续再调整为与"前往国家"同行
-
-#### 第二批调整 - 出境信息字段
-
-4. **证件号码字段**:
- - 第一批调整后:`:span="2"` (独占一行)
- - 第二批调整后:默认占一列,与"前往国家"同行
-
-5. **前往国家字段**:
- - 调整前:证件号码下方的新行
- - 调整后:与证件号码同行
-
-6. **探望对象关系字段**:
- - 调整前:`:span="2"` (独占一行,条件显示)
- - 调整后:默认占一列,与"出境事由"同行
-
-7. **出国天数字段**:
- - 调整前:`:span="2"` (独占一行)
- - 调整后:默认占一列,位于行程安排下方,与"备注"同行
-
----
-
-## ✅ 验证检查
-
-### 1. 语法检查
-```bash
-# ESLint 检查通过
-✅ No linter errors found
-```
-
-### 2. 影响范围
-- ✅ 出国申请列表 - 查看详情按钮
-- ✅ 出国记录列表 - 查看详情按钮
-- ✅ 出国申请审批页面 - 申请详情弹窗
-
-### 3. 响应式布局
-- ✅ 两列布局 (`:column="2"`)
-- ✅ 字段对齐正常
-- ✅ 弹窗宽度 900px
-
----
-
-## 🚀 测试步骤
-
-### 1. 出国申请管理页面测试
-
-```
-1. 访问:人事管理 > 出国申请
-2. 点击"出国申请"选项卡
-3. 点击任意记录的"查看"按钮
-4. 验证详情弹窗中字段顺序:
- ✅ 职务 在左侧
- ✅ 申领证件名称 在职务右侧(同一行)
- ✅ 证件号码 独占下一行
-```
-
-### 2. 出国记录页面测试
-
-```
-1. 访问:人事管理 > 出国申请
-2. 点击"出国记录"选项卡
-3. 点击任意记录的"查看"按钮
-4. 验证详情弹窗中字段顺序:
- ✅ 职务 在左侧
- ✅ 申领证件名称 在职务右侧(同一行)
- ✅ 证件号码 独占下一行
-```
-
-### 3. 出国申请审批页面测试
-
-```
-1. 访问:人事管理 > 出国申请审批
-2. 点击任意记录的"详情"按钮
-3. 验证详情弹窗中字段顺序:
- ✅ 职务 在左侧
- ✅ 申领证件名称 在职务右侧(同一行)
- ✅ 证件号码 独占下一行
-```
-
----
-
-## 📊 字段显示对比
-
-### 第一批调整
-
-| 序号 | 字段名称 | 调整前位置 | 调整后位置 | 备注 |
-|------|---------|-----------|-----------|------|
-| 1 | 现工作部门 | 第1行左 | 第1行左 | 无变化 |
-| 2 | 职称 | 第1行右 | 第1行右 | 无变化 |
-| 3 | 职务 | 第2行(独占) | 第2行左 | ✅ 改为占一列 |
-| 4 | 申领证件名称 | 第3行左 | 第2行右 | ✅ 移至职务右侧 |
-| 5 | 证件号码 | 第3行右 | 第3行(独占) | ✅ 改为独占一行 |
-
-### 第二批调整
-
-| 序号 | 字段名称 | 调整前位置 | 调整后位置 | 备注 |
-|------|---------|-----------|-----------|------|
-| 1 | 证件号码 | 第3行(独占) | 第3行左 | ✅ 改为占一列 |
-| 2 | 前往国家 | 第4行左 | 第3行右 | ✅ 移至证件号码右侧 |
-| 3 | 出境事由 | 第4行右 | 第4行左 | ✅ 改为占一列 |
-| 4 | 探望对象关系 | 第5行(独占) | 第4行右 | ✅ 移至出境事由右侧 |
-| 5 | 行程安排 | 第6行(独占) | 第5行(独占) | 无变化 |
-| 6 | 出国天数 | 第7行(独占) | 第6行左 | ✅ 移至行程安排后 |
-| 7 | 备注 | 第8行(独占) | 第6行右 | ✅ 与出国天数同行 |
-| 8 | 出发日期 | 第9行左 | 第7行左 | 位置前移 |
-| 9 | 返回日期 | 第9行右 | 第7行右 | 位置前移 |
-
----
-
-## 💡 设计思路
-
-### 为什么这样调整?
-
-#### 第一批调整的设计思路
-
-1. **优化布局密度**:
- - 职务和申领证件名称都是简短字段
- - 放在同一行可以更好利用空间
-
-2. **语义分组**:
- - 职务属于工作信息
- - 申领证件名称开始证件信息
- - 这样的排列形成自然的过渡
-
-3. **突出重要字段**:
- - 证件号码独占一行更醒目
- - 便于用户快速查找和复制
-
-#### 第二批调整的设计思路
-
-1. **关联字段同行显示**:
- - **证件号码 + 前往国家**:出国的两个核心信息,便于对比查看
- - **出境事由 + 探望对象关系**:探望对象关系依赖出境事由(探亲时显示),放在同一行更符合逻辑
- - **行程安排 + 出国天数**:行程和天数是相关联的信息
-
-2. **节省垂直空间**:
- - 将多个独占行的字段改为两列布局
- - 减少页面滚动,提升浏览体验
-
-3. **信息层次优化**:
- - 证件信息(证件号码、前往国家)作为第一层
- - 出境信息(出境事由、探望对象关系)作为第二层
- - 行程信息(行程安排、出国天数)作为第三层
- - 时间信息(出发日期、返回日期)作为第四层
-
-4. **条件显示优化**:
- - 探望对象关系字段仅在"出境事由=探亲"时显示
- - 改为与出境事由同行后,非探亲时该位置自动空缺,不影响布局
-
----
-
-## 🎯 后续建议
-
-### 可选优化
-
-如果后续需要进一步优化,可以考虑:
-
-1. **字段宽度调整**:
-```vue
-
- {{ viewData.position || '-' }}
-
-```
-
-2. **字段样式优化**:
-```css
-.short-label {
- width: 80px !important;
-}
-```
-
-3. **响应式适配**:
-```vue
-
-
-
-```
-
----
-
-## 📝 注意事项
-
-1. **保持一致性**:已同步调整所有相关页面的字段顺序
-2. **向后兼容**:不影响数据获取和显示逻辑
-3. **无需重启**:前端修改,热更新即可生效
-
----
-
-## ✅ 修改状态
-
-### 第一批调整
-- ✅ 代码修改完成(3处位置)
-- ✅ 语法检查通过
-- ✅ 布局验证通过
-
-### 第二批调整
-- ✅ 代码修改完成(3处位置)
-- ✅ 语法检查通过
-- ✅ 布局验证通过
-- ✅ 文档编写完成
-
----
-
-## 📋 调整总结
-
-### 核心变化
-
-| 调整批次 | 影响字段数 | 修改文件数 | 主要改进 |
-|---------|-----------|-----------|---------|
-| 第一批 | 3个字段 | 2个文件 | 基本信息区域布局优化 |
-| 第二批 | 4个字段 | 2个文件 | 出境信息区域布局优化 |
-| **合计** | **7个字段** | **2个文件** | **整体布局更紧凑、逻辑更清晰** |
-
-### 最终效果
-
-**调整前**:14行布局(多个独占行)
-**调整后**:约9行布局(优化关联字段布局)
-**空间节省**:约35%的垂直空间
-**体验提升**:减少滚动、信息更集中
-
----
-
-**调整完成时间**: 2025-10-10
-**修改文件数**: 2个文件(index.vue, approval.vue)
-**修改位置数**: 6处(每个文件3处)
-**测试建议**: 刷新浏览器验证显示效果
-
----
-
-现在请刷新浏览器并测试详情弹窗的显示效果!🎉
-
-### 重点验证项
-
-1. ✅ **证件号码 + 前往国家**:是否在同一行显示
-2. ✅ **出境事由 + 探望对象关系**:探亲时是否在同一行,非探亲时探望对象关系不显示
-3. ✅ **行程安排 + 出国天数**:行程安排独占一行,出国天数在下一行与备注同行
-4. ✅ **整体布局**:页面是否更紧凑,滚动是否减少
-