feat: OA(泛微 ecology)登录身份校验 + 公示详情悬浮按钮/PDF缩放

OA 登录校验 (manager/leader 单一可信源 = ecology 合规视图 v_compliance_project_manager):
- ComplianceLoginService: 手机号登录查视图(type=1→manager/type=2→leader), 自动建号 sys_user+biz_person, 角色不匹配软删重建; 密码登录门禁 gateForPasswordLogin
- EcologyDataSourceConfig: 独立只读 JdbcTemplate(ecologyJdbcTemplate) 接泛微库, 不接入主库动态数据源
- SysLoginController: 密码登录前 complianceGate 校验 manager/leader 仍存于视图
- BizAuthController: smsLogin 改走 reconcileForLogin; 发码放行 ecology 视图内未注册手机号
- application*.yml: 新增 spring.datasource.ecology 只读连接(prod/test)
- Login.vue: 登录标题居中微调 + 供应商注册跳生产域名

公示详情 (publicity/:id):
- 右侧悬浮操作按钮从垂直居中改为主区右上(紧贴版心右缘), 中窄屏兜底贴右缘
- PDF 预览 #zoom 由 page-width 改为数值缩放(121), 放大正文占满宽度

文档:
- shouce/ 手册 md 入仓

注: oalogin/ (含 OA 管理员密码的临时笔记) 已加 .gitignore, 不入库
This commit is contained in:
郭庆泰
2026-09-01 20:45:15 +08:00
parent a14d95288c
commit beb9799a06
20 changed files with 2425 additions and 30 deletions
@@ -25,6 +25,7 @@ import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.business.domain.BizExpert;
import com.ruoyi.business.service.ComplianceLoginService;
import com.ruoyi.business.service.IBizExpertService;
/**
@@ -56,6 +57,9 @@ public class SysLoginController
@Autowired
private IBizExpertService expertService;
@Autowired
private ComplianceLoginService complianceLoginService;
/**
* 登录方法
*
@@ -70,6 +74,12 @@ public class SysLoginController
{
return AjaxResult.error("您的信息正在审核中");
}
// 合规人员/项目负责人门禁: 校验其仍存在于 ecology 视图, 角色变更则软删重建
String complianceGate = complianceGate(loginBody.getUsername());
if (complianceGate != null)
{
return AjaxResult.error(complianceGate);
}
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
@@ -101,6 +111,33 @@ public class SysLoginController
return expert != null && "1".equals(expert.getAuditStatus());
}
/**
* 密码登录门禁: 用户名命中 manager/leader 时校验其仍存在于 ecology 视图.
* 返回 null=放行, 非 null=错误提示 (直接报错, 不走密码登录).
*/
private String complianceGate(String username)
{
if (username == null || username.isEmpty())
{
return null;
}
SysUser probe = userService.selectUserByUserName(username);
if (probe == null && username.contains("@"))
{
probe = userService.selectUserByEmail(username);
}
if (probe == null || probe.getUserId() == null)
{
return null;
}
String role = probe.getRoleType();
if (!"manager".equals(role) && !"leader".equals(role))
{
return null;
}
return complianceLoginService.gateForPasswordLogin(probe);
}
/**
* 获取用户信息
*
@@ -10,6 +10,12 @@ spring:
url: jdbc:mysql://47.95.12.80:3306/hegui?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: hegui
password: C55zwt5L2TeB4kLB
# 合规(泛微 ecology)外部只读库, 登录校验合规人员/项目负责人用
ecology:
url: jdbc:mysql://oagm228.guojustar.com:3306/ecology?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: user_compliance
password: 'ComplexPass@2026'
driver-class-name: com.mysql.cj.jdbc.Driver
# 生产环境外部接口地址
ruoyi:
@@ -20,15 +26,15 @@ ruoyi:
base-url: https://hegui.bahim.org.cn/camera/
supplier-account-api:
# base-url: https://zbsupplier.guojustar.com/supplier-api/bidding/supplier/openapi/accounts
base-url: https://zbsuppliertest.guojustar.com/supplier-api/bidding/supplier/openapi/accounts
base-url: https://zbsupplier.guojustar.com/supplier-api/bidding/supplier/openapi/accounts
# base-url: https://zbsuppliertest.guojustar.com/supplier-api/bidding/supplier/openapi/accounts
supplier-account-api-aes:
key-id: supplier-api-key
key: 'kY0+oIO/laeaaaYDd+9TCYbCQR0b/vqMeJ9sUnSVd9U='
bidding-api:
# notice-list-url: https://zbpublic.guojustar.com/portal-api/bidding/public/notice/list
# detail-url: https://zbpublic.guojustar.com/#/detail/
notice-list-url: https://zbpublictest.guojustar.com/portal-api/bidding/public/notice/list
detail-url: https://zbpublictest.guojustar.com/#/detail/
notice-list-url: https://zbpublic.guojustar.com/portal-api/bidding/public/notice/list
detail-url: https://zbpublic.guojustar.com/#/detail/
# notice-list-url: https://zbpublictest.guojustar.com/portal-api/bidding/public/notice/list
# detail-url: https://zbpublictest.guojustar.com/#/detail/
@@ -6,6 +6,12 @@ spring:
url: jdbc:mysql://mmos.uvwcloud.com:3306/guoju0808?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: Qljl1rh_
# 合规(泛微 ecology)外部只读库, 登录校验合规人员/项目负责人用
ecology:
url: jdbc:mysql://101.254.99.156:11120/ecology?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: user_compliance
password: 'ComplexPass@2026'
driver-class-name: com.mysql.cj.jdbc.Driver
# 测试环境外部接口地址
ruoyi:
@@ -97,7 +97,7 @@ spring:
basename: i18n/messages
profiles:
# 默认 prod 环境; 本地测试用 --spring.profiles.active=test (group 自动展开为 druid,test)
active: prod
active: test
group:
test: druid,test
prod: druid,prod