基础信息修改

dev-tmp1
huwei 2026-08-08 14:18:54 +08:00
parent 553a2a75a7
commit 026d86b082
6 changed files with 1302 additions and 718 deletions

View File

@ -1,6 +1,15 @@
const Cesium = window.Cesium;
// 2026-08-08 修复:原实现在模块顶层直接 `const Cesium = window.Cesium` 并立即访问
// `Cesium.createPropertyDescriptor` / `Cesium.Material` 执行材质注册。当 CesiumCDN 全局脚本)
// 尚未就绪(如离线/CDN 不可达/加载顺序差异)时,模块求值阶段即抛
// "Cannot read properties of undefined (reading 'createPropertyDescriptor')"
// 而该模块被自动路由同步加载会连带阻塞整个应用启动DvaRoot 渲染失败)。
// 变更逻辑:① 统一改用 `window.Cesium` 取最新全局值,避免加载时缓存为 undefined
// ② 把依赖 Cesium 的材质注册逻辑延迟到 Cesium 就绪后执行(立即或 window load 事件),
// 注册失败仅跳过、不抛错,保证即使 Cesium 暂未加载也不会拖垮应用启动。
function TrajectoryPolylineTrailLinkMaterialProperty(viewer) {
// 构造时再取全局 Cesium确保 Cesium 已就绪
const Cesium = window.Cesium;
this.viewer = viewer;
this._definitionChanged = new Cesium.Event();
this._uTime = 0;
@ -17,7 +26,9 @@ Object.defineProperties(TrajectoryPolylineTrailLinkMaterialProperty.prototype, {
return this._definitionChanged;
},
},
uTime: Cesium.createPropertyDescriptor("uTime"),
uTime: window.Cesium
? window.Cesium.createPropertyDescriptor("uTime")
: { get() { return this._uTime; }, set(v) { this._uTime = v; } },
});
TrajectoryPolylineTrailLinkMaterialProperty.prototype.getType = function () {
@ -28,6 +39,7 @@ TrajectoryPolylineTrailLinkMaterialProperty.prototype.getValue = function (
time,
result,
) {
const Cesium = window.Cesium;
if (!Cesium.defined(result)) {
result = {};
}
@ -52,8 +64,15 @@ TrajectoryPolylineTrailLinkMaterialProperty.prototype.equals = function (
);
};
Cesium.Material.CustomMaterialType = "CustomMaterial";
Cesium.Material.CustomMaterialSource = `
// 注册到 Cesium.Material依赖 Cesium 全局脚本已就绪),失败仅跳过不阻断应用
function registerTrajectoryMaterial() {
try {
const Cesium = window.Cesium;
if (!Cesium || !Cesium.Material) {
return;
}
Cesium.Material.CustomMaterialType = "CustomMaterial";
Cesium.Material.CustomMaterialSource = `
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
@ -66,16 +85,29 @@ czm_material czm_getMaterial(czm_materialInput materialInput)
material.emission = material.diffuse * 0.5;
return material;
}`;
Cesium.Material._materialCache.addMaterial(Cesium.Material.CustomMaterialType, {
fabric: {
type: Cesium.Material.CustomMaterialType,
uniforms: {
uTime: 0,
},
source: Cesium.Material.CustomMaterialSource,
},
});
Cesium.TrajectoryPolylineTrailLinkMaterialProperty
= TrajectoryPolylineTrailLinkMaterialProperty;
} catch (e) {
// Cesium 未就绪或注册异常仅跳过不阻断应用启动Map 真实访问时 Cesium 已存在)
// eslint-disable-next-line no-console
console.warn("[TrajectoryPolylineTrailLinkMaterialProperty] 材质注册跳过:", e);
}
}
Cesium.Material._materialCache.addMaterial(Cesium.Material.CustomMaterialType, {
fabric: {
type: Cesium.Material.CustomMaterialType,
uniforms: {
uTime: 0,
},
source: Cesium.Material.CustomMaterialSource,
},
});
// 模块顶层仅定义类;注册延迟到 Cesium 就绪(立即或 window load后执行避免阻断应用启动
if (window.Cesium && window.Cesium.Material) {
registerTrajectoryMaterial();
} else {
window.addEventListener("load", registerTrajectoryMaterial, { once: true });
}
Cesium.TrajectoryPolylineTrailLinkMaterialProperty
= TrajectoryPolylineTrailLinkMaterialProperty;
export default TrajectoryPolylineTrailLinkMaterialProperty;

View File

@ -1,14 +1,22 @@
import PolylineTrailLinkImage from "~/assets/images/map_bi/wall_img.png";
const Cesium = window.Cesium;
// 2026-08-08 修复:原实现在模块顶层 `const Cesium = window.Cesium` 并立即访问
// `Cesium.Color` / `Cesium.Material` 执行材质注册。当 CesiumCDN 全局脚本)尚未就绪时,
// 模块求值阶段即抛错,而该模块被自动路由同步加载,会连带阻塞整个应用启动。
// 变更逻辑:① 统一改用 `window.Cesium` 取最新全局值;② 材质注册延迟到 Cesium 就绪后执行,
// 失败仅跳过、不抛错保证应用可正常启动Map 真实访问时 Cesium 已存在)。
function WallPolylineTrailLinkMaterialProperty(
viewer,
options = {
color: Cesium.Color.fromBytes(201, 118, 243).withAlpha(0.5),
// 构造时再取全局 Cesium避免加载时缓存为 undefined
color: window.Cesium
? window.Cesium.Color.fromBytes(201, 118, 243).withAlpha(0.5)
: undefined,
duration: 2000,
},
) {
const Cesium = window.Cesium;
this.viewer = viewer;
this._definitionChanged = new Cesium.Event();
this._color = undefined;
@ -29,15 +37,20 @@ Object.defineProperties(WallPolylineTrailLinkMaterialProperty.prototype, {
return this._definitionChanged;
},
},
color: Cesium.createPropertyDescriptor("color"),
color: window.Cesium
? window.Cesium.createPropertyDescriptor("color")
: { get() { return this._color; }, set(v) { this._color = v; } },
});
WallPolylineTrailLinkMaterialProperty.prototype.getType = function () {
return "PolylineTrailLink";
};
WallPolylineTrailLinkMaterialProperty.prototype.getValue = function (
time,
result,
) {
const Cesium = window.Cesium;
if (!Cesium.defined(result)) {
result = {};
}
@ -56,18 +69,28 @@ WallPolylineTrailLinkMaterialProperty.prototype.getValue = function (
this.viewer.scene.requestRender();
return result;
};
WallPolylineTrailLinkMaterialProperty.prototype.equals = function (other) {
const Cesium = window.Cesium;
return (
this === other
|| (other instanceof WallPolylineTrailLinkMaterialProperty
&& Cesium.Property.equals(this._color, other._color))
);
};
Cesium.WallPolylineTrailLinkMaterialProperty
= WallPolylineTrailLinkMaterialProperty;
Cesium.Material.PolylineTrailLinkType = "PolylineTrailLink";
Cesium.Material.PolylineTrailLinkImage = PolylineTrailLinkImage;
Cesium.Material.PolylineTrailLinkSource = `czm_material czm_getMaterial(czm_materialInput
// 注册到 Cesium.Material依赖 Cesium 全局脚本已就绪),失败仅跳过不阻断应用
function registerWallMaterial() {
try {
const Cesium = window.Cesium;
if (!Cesium || !Cesium.Material) {
return;
}
Cesium.WallPolylineTrailLinkMaterialProperty
= WallPolylineTrailLinkMaterialProperty;
Cesium.Material.PolylineTrailLinkType = "PolylineTrailLink";
Cesium.Material.PolylineTrailLinkImage = PolylineTrailLinkImage;
Cesium.Material.PolylineTrailLinkSource = `czm_material czm_getMaterial(czm_materialInput
materialInput)\n\
{\n\
czm_material material =
@ -83,20 +106,35 @@ Cesium.Material.PolylineTrailLinkSource = `czm_material czm_getMaterial(czm_mate
material.emission = fragColor.rgb;\n\
return material;\n\
}`;
Cesium.Material._materialCache.addMaterial(
Cesium.Material.PolylineTrailLinkType,
{
fabric: {
type: Cesium.Material.PolylineTrailLinkType,
uniforms: {
color: new Cesium.Color(1.0, 1.0, 1.0, 1),
image: Cesium.Material.PolylineTrailLinkImage,
time: 0,
Cesium.Material._materialCache.addMaterial(
Cesium.Material.PolylineTrailLinkType,
{
fabric: {
type: Cesium.Material.PolylineTrailLinkType,
uniforms: {
color: new Cesium.Color(1.0, 1.0, 1.0, 1),
image: Cesium.Material.PolylineTrailLinkImage,
time: 0,
},
source: Cesium.Material.PolylineTrailLinkSource,
},
translucent() {
return true;
},
},
source: Cesium.Material.PolylineTrailLinkSource,
},
translucent() {
return true;
},
},
);
);
} catch (e) {
// Cesium 未就绪或注册异常:仅跳过,不阻断应用启动
// eslint-disable-next-line no-console
console.warn("[WallPolylineTrailLinkMaterialProperty] 材质注册跳过:", e);
}
}
// 模块顶层仅定义类;注册延迟到 Cesium 就绪(立即或 window load后执行避免阻断应用启动
if (window.Cesium && window.Cesium.Material) {
registerWallMaterial();
} else {
window.addEventListener("load", registerWallMaterial, { once: true });
}
export default WallPolylineTrailLinkMaterialProperty;

View File

@ -13,6 +13,7 @@ import loginbg from "~/enumerate/img/loginbg.jpg";
import logo from "~/enumerate/img/logo.png";
import leftIcon from "~/enumerate/img/left-img.jpg";
import "./index.less";
import { cacheRegisterQueryParams } from "~/utils/resolveRegisterQueryParams";
function Register(props) {
const { sendMessageAction, registerAction, register } = props;
@ -74,6 +75,11 @@ function Register(props) {
}
message.success("操作成功");
form.resetFields();
// 2026-08-08 跳转填报页同时写入会话缓存,供填报页缺失路由参数时兜底读取(防止瞎写 registerUserId
cacheRegisterQueryParams({
account: values.account,
registerUserId: res.data.id,
});
props.history.push(
`RegisterMore?account=${encodeURIComponent(values.account)}&registerUserId=${encodeURIComponent(res.data.id)}`,
);

File diff suppressed because it is too large Load Diff

View File

@ -1,13 +1,349 @@
// ============================================================
// 2026-08-08 依据原型 V1.6 register.html「认证信息填报页」1:1 还原
// 变更原因:原型为原生 HTML/CSS非 antd需按原型样式、布局、颜色、边框、字体、
// 按钮、响应式做 1:1 还原。
// 变更逻辑:将原型 register.html 内联 CSS 迁入本文件,置于 .register-more 命名空间下
// 避免影响全局;保留 .audit-look 审核中动画等既有区块。
// 变更理由:最小侵入、样式与原型一一对应,支持 max-width:760px 响应式单列布局。
// ============================================================
.register-more {
position: relative;
padding-bottom: 20px;
// 背景
min-height: 100vh;
background: #f7f9fc;
color: #1f2937;
font-family: "Microsoft YaHei", "PingFang SC", Arial, sans-serif;
box-sizing: border-box;
padding-bottom: 40px;
// ---- hero 头图区(原型 .hero----
.register-more-hero {
height: 230px;
background: linear-gradient(90deg, #eef3fb, #fff, #e7f0ff);
display: flex;
align-items: center;
padding-left: max(calc((100% - 1180px) / 2), 30px);
h1 {
font-size: 26px;
margin: 0;
color: #1f2937;
}
}
// ---- 内容容器(原型 .wrap----
.register-more-wrap {
max-width: 1180px;
margin: auto;
padding: 30px 24px 60px;
}
// ---- 步骤条(原型 .steps / .step----
.register-more-steps {
display: flex;
justify-content: center;
align-items: center;
margin-bottom: 28px;
}
.register-more-step {
display: flex;
align-items: center;
color: #9ca3af;
font-size: 14px;
i {
width: 34px;
height: 34px;
border-radius: 50%;
display: grid;
place-items: center;
background: #f0f2f5;
font-style: normal;
margin-right: 9px;
font-size: 14px;
}
&.active {
color: #111827;
i {
background: #1677ed;
color: #fff;
}
}
&:not(:last-child)::after {
content: "";
width: 100px;
height: 1px;
background: #cbd1da;
margin: 0 20px;
}
}
// ---- 卡片(原型 .card----
.register-more-card {
background: #fff;
border: 1px solid #e4e9f0;
padding: 28px 35px;
border-radius: 5px;
h2 {
text-align: center;
margin: 0 0 26px;
font-size: 22px;
color: #1f2937;
}
}
// ---- 两列 grid原型 .grid / .field----
.register-more-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 20px 60px;
}
.register-more-field {
display: grid;
grid-template-columns: 150px 1fr;
align-items: center;
label {
text-align: right;
padding-right: 14px;
font-size: 14px;
color: #1f2937;
}
&.required label::before {
content: "*";
color: #ef4444;
margin-right: 4px;
}
input,
textarea {
width: 100%;
height: 36px;
border: 1px solid #d3d8e1;
border-radius: 3px;
padding: 8px 11px;
font: 14px inherit;
color: #1f2937;
background: #fff;
outline: none;
transition: border-color 0.15s;
&::placeholder {
color: #9ca3af;
}
&:focus {
border-color: #1677ed;
}
&:disabled {
background: #f5f7fa;
color: #9ca3af;
cursor: not-allowed;
}
}
textarea {
height: 68px;
resize: vertical;
}
&.align-start {
align-items: start;
label {
padding-top: 10px;
}
}
}
.register-more-large-textarea {
height: 150px !important;
line-height: 1.7;
}
// ---- 控件容器与错误提示(原生受控表单)----
.register-more-control {
display: flex;
flex-direction: column;
gap: 4px;
input[type="number"] {
// 隐藏 number input 的步进箭头,保持原型简洁外观
&::-webkit-outer-spin-button,
&::-webkit-inner-spin-button {
-webkit-appearance: none;
margin: 0;
}
-moz-appearance: textfield;
appearance: textfield;
}
}
.register-more-error {
color: #ef4444;
font-size: 12px;
line-height: 1.4;
margin-top: 2px;
}
.is-disabled {
opacity: 0.6;
pointer-events: none;
}
// ---- 营业执照上传区(与单位名称/信用代码同为两列布局,按钮与文本输入框同高同边框)----
.register-more-license {
display: flex;
flex-direction: column;
align-items: stretch;
gap: 6px;
}
// 2026-08-08 营业执照按钮:与 .field input 同 36px 高、同 1px solid #d3d8e1 边框、同 3px 圆角,
// 仅与右侧文本输入对齐且宽度自适应;框内左侧 * 红星表示必填。
.register-more-file-btn {
position: relative;
display: inline-flex;
align-items: center;
height: 36px;
padding: 0 11px;
border: 1px solid #d3d8e1;
border-radius: 3px;
color: #1f2937;
background: #fff;
font-size: 14px;
cursor: pointer;
white-space: nowrap;
flex: 0 0 auto;
transition: border-color 0.15s;
&:hover {
border-color: #1677ed;
}
input[type="file"] {
position: absolute;
inset: 0;
opacity: 0;
cursor: pointer;
}
}
.register-more-file-text {
color: #475569;
}
// ---- 业务范围多选(原型 .scope-options----
.register-more-scope {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 10px 18px;
padding: 14px;
border: 1px solid #d3d8e1;
border-radius: 3px;
background: #fbfcfe;
label {
display: flex;
align-items: flex-start;
text-align: left;
padding: 0;
font-size: 14px;
line-height: 1.5;
cursor: pointer;
color: #1f2937;
}
input[type="checkbox"] {
width: 16px;
height: 16px;
margin: 3px 8px 0 0;
flex: 0 0 auto;
}
}
// ---- 可选说明 / 底部提示(原型 .optional-note / .tip----
.register-more-optional-note {
display: block;
color: #8b95a5;
font-size: 12px;
margin-top: 6px;
}
.register-more-tip {
margin: 20px 0 0 150px;
color: #8b95a5;
font-size: 12px;
}
// ---- 全宽字段(原型 .wide----
.register-more-wide {
grid-column: 1 / -1;
}
// ---- 操作按钮(原型 .actions / .btn----
.register-more-actions {
display: flex;
justify-content: center;
gap: 14px;
border-top: 1px solid #edf0f4;
margin-top: 28px;
padding-top: 24px;
}
.register-more-btn {
height: 40px;
padding: 0 25px;
border: 0;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: opacity 0.15s;
&:disabled {
opacity: 0.5;
cursor: not-allowed;
}
&.primary {
background: #1677ed;
color: #fff;
&:hover:not(:disabled) {
background: #0958d9;
}
}
&.secondary {
background: #f1f4f8;
color: #475569;
&:hover:not(:disabled) {
background: #e5eaf1;
}
}
}
// ---- 营业执照文件列表(自定义,贴近原型原生 file input 的说明样式)----
.register-more-license-list {
display: flex;
flex-wrap: wrap;
gap: 8px;
margin-top: 8px;
.license-item {
display: inline-flex;
align-items: center;
gap: 6px;
border: 1px solid #d3d8e1;
border-radius: 3px;
background: #fbfcfe;
padding: 4px 8px;
font-size: 12px;
color: #1f2937;
a {
color: #1677ed;
text-decoration: none;
}
.license-remove {
border: 0;
background: none;
color: #ef4444;
cursor: pointer;
font-size: 14px;
line-height: 1;
}
}
}
// ---- 审核中/通过 区块(既有动画,保留)----
.audit-look {
background-repeat: no-repeat;
height: 175px;
width: 171px;
position: relative;
}
.audit-look-img{
.audit-look-img {
position: absolute;
width: 45px;
height: 45px;
@ -17,7 +353,6 @@
margin-left: -22.5px;
animation: orbit-clockwise 2s linear infinite;
}
@keyframes orbit-clockwise {
from {
transform: rotate(0deg) translateX(8px) rotate(0deg);
@ -26,23 +361,58 @@
transform: rotate(360deg) translateX(8px) rotate(-360deg);
}
}
.register-more-header {
height: 250px;
position: relative;
.register-more-header-content {
width: 1200px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.register-more-header-title {
font-size: 24px;
font-weight: bold;
.register-more-state {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
color: #1f2937;
font-size: 16px;
img {
max-width: 120px;
}
}
.register-more-content {
width: 1200px;
margin: 30px auto 20px;
// ---- 响应式(原型 @media max-width:760px----
@media (max-width: 760px) {
.register-more-hero {
height: 140px;
padding-left: 20px;
h1 {
font-size: 20px;
}
}
.register-more-wrap {
padding: 20px 10px;
}
.register-more-card {
padding: 20px 12px;
h2 {
font-size: 18px;
}
}
.register-more-grid {
grid-template-columns: 1fr;
gap: 14px;
}
.register-more-wide {
grid-column: auto;
}
.register-more-field {
grid-template-columns: 125px 1fr;
}
.register-more-scope {
grid-template-columns: 1fr;
}
.register-more-step:not(:last-child)::after {
width: 28px;
margin: 0 7px;
}
.register-more-step {
font-size: 12px;
}
.register-more-tip {
margin-left: 125px;
}
}
}

View File

@ -1,6 +1,35 @@
import { tools } from "@cqsjjb/jjb-common-lib";
// ===== 2026-08-08 注册填报参数解析:路由参数 + 会话缓存兜底(变更原因) =====
// 变更理由:填报页 registerUserId 必须来自"真实注册流程的路由参数"或"本次会话缓存"
// 禁止用户手改 URL 瞎写非法 id此前出现过 create_id 与真实账户脱节的问题)。
// 备注:使用 sessionStorage会话级缓存刷新/重进不丢失,关闭标签页即清除,不污染全局。
const QUERY_KEYS = ["account", "registerUserId"];
const CACHE_KEY = "registerQueryParams";
// 注册成功后写入缓存,供填报页缺失路由参数时兜底读取
export function cacheRegisterQueryParams(params) {
try {
if (!params) return;
const next = { ...readCachedParams() };
for (const key of QUERY_KEYS) {
if (params[key]) next[key] = params[key];
}
sessionStorage.setItem(CACHE_KEY, JSON.stringify(next));
} catch {
// ignore
}
}
function readCachedParams() {
try {
const raw = sessionStorage.getItem(CACHE_KEY);
if (!raw) return {};
return JSON.parse(raw) || {};
} catch {
return {};
}
}
function parseFromSearch(search) {
const params = {};
@ -73,6 +102,7 @@ export function resolveRegisterQueryParams() {
parseFromUrl(window.location.href),
parseFromUrl(document.referrer),
readRouterQuery(),
readCachedParams(),
];
for (const source of sources) {