前端进度条性能优化、仿真结束后后处理优化;后端C代码生成流程优化:先识别来源,再按照已知未知量需求排序,最后局部求解

This commit is contained in:
ljz committed 2026-09-11 11:27:54 +08:00
1 parent 0dcb465d84
commit 91bd9fb252
77 files changed
+11223 -551

No files matched your search

@@ -0,0 +1,108 @@
:root { font: 14px/1.5 Inter, "Segoe UI", "Microsoft YaHei", sans-serif; color: #263442; background: #edf1f5; --blue: #1764a0; --border: #cfd8e3; --muted: #647487; }
* { box-sizing: border-box; }
body { margin: 0; }
button, input, select { font: inherit; }
button, a { -webkit-tap-highlight-color: transparent; }
button { cursor: pointer; color: #263442; border: 1px solid var(--border); background: #fff; border-radius: 4px; padding: 6px 12px; }
button:hover { background: #f0f5fa; }
button:disabled { cursor: default; opacity: .5; }
button:focus-visible, a:focus-visible, input:focus-visible, summary:focus-visible { outline: 2px solid #247ec5; outline-offset: 3px; }
a { color: var(--blue); text-decoration: none; }
strong { font-weight: 600; }
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 12px 18px; background: #fff; border-bottom: 1px solid var(--border); }
.topbar strong { font-size: 16px; }
.demo-tag { display: inline-block; margin-left: 14px; color: var(--muted); font-size: 12px; }
.top-actions { display: flex; align-items: center; gap: 18px; }
.workflow { display: flex; align-items: center; gap: 4px; padding: 7px 18px; background: #f8fafc; border-bottom: 1px solid var(--border); }
.workflow button { display: flex; align-items: center; gap: 8px; background: transparent; border-color: transparent; padding: 8px 18px; }
.workflow button span { display: inline-grid; place-items: center; width: 21px; height: 21px; border-radius: 50%; background: #e3e9ef; font-size: 12px; }
.workflow button[aria-pressed="true"] { background: #e7f1fa; border-color: #b4cfe4; color: #155a94; }
.workflow button[aria-pressed="true"] span { background: var(--blue); color: #fff; }
.workflow-note { margin-left: auto; color: var(--muted); font-size: 12px; }
.workspace { display: grid; grid-template-columns: minmax(0, 1fr) 310px; min-height: calc(100vh - 143px); }
.canvas-pane { min-width: 0; display: flex; flex-direction: column; }
.canvas-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 11px 16px; min-height: 55px; border-bottom: 1px solid var(--border); font-size: 12px; }
.canvas-toolbar button { white-space: nowrap; font-size: 13px; }
.canvas { position: relative; width: 100%; aspect-ratio: 1.8; min-height: 420px; max-height: 620px; background-color: #fff; background-image: radial-gradient(#d3dce5 .7px, transparent .7px); background-size: 20px 20px; }
#wires { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.wire-line { fill: none; stroke: #8b9aaa; stroke-width: 2; stroke-dasharray: 6 4; vector-effect: non-scaling-stroke; pointer-events: none; }
.wire-line.configured { stroke: #526c7c; stroke-dasharray: none; }
.wire-line.selected { stroke: #1472bd; stroke-width: 3; }
.wire-hit { fill: none; stroke: transparent; stroke-width: 20; pointer-events: stroke; cursor: pointer; }
.wire-label { fill: #596f84; font: 13px "Segoe UI", "Microsoft YaHei", sans-serif; paint-order: stroke; stroke: #fff; stroke-width: 5px; stroke-linejoin: round; pointer-events: none; }
.component { position: absolute; left: var(--x); top: var(--y); transform: translate(-50%, -50%); display: flex; flex-direction: column; align-items: center; pointer-events: none; }
.component strong { position: absolute; top: calc(100% + 12px); white-space: nowrap; font-size: 13px; }
.component small { position: absolute; top: calc(100% + 33px); color: var(--muted); white-space: nowrap; font-size: 11px; }
.junction strong, .junction small { left: calc(100% + 18px); }
.tank-symbol { width: 58px; height: 76px; border: 2px solid #506579; border-radius: 16px; background: #f8fafc; }
.junction-symbol { width: 38px; height: 38px; position: relative; }
.junction-symbol::before, .junction-symbol::after { content: ""; position: absolute; background: #344f68; }
.junction-symbol::before { width: 38px; height: 3px; top: 17px; }
.junction-symbol::after { width: 3px; height: 38px; left: 17px; }
.valve-symbol { width: 58px; height: 43px; display: grid; place-items: center; font: 33px/1 sans-serif; border: 2px solid #506579; background: #f8fafc; }
.plug-symbol { width: 24px; height: 8px; background: repeating-linear-gradient(130deg, #506579 0 2px, #fff 2px 5px); border-bottom: 2px solid #506579; }
.plug strong { top: -5px; left: calc(100% + 12px); }
.port { position: absolute; left: var(--x); top: var(--y); transform: translate(-50%, -50%); width: 27px; height: 27px; padding: 0; display: grid; place-items: center; border: 0; background: transparent; border-radius: 50%; }
.port::before { content: ""; width: 9px; height: 9px; background: #fff; border: 2px solid #4c6d87; border-radius: 50%; }
.port.pending { background: #e3effa; }
.port.pending::before { background: #1472bd; border-color: #1472bd; }
.port span { position: absolute; left: 23px; top: -4px; color: #516678; font-size: 10px; background: #fff; white-space: nowrap; pointer-events: none; }
.port.reference::before { border-color: #b37621; }
.port.reference span { color: #8d5d1b; }
.canvas-caption { position: absolute; bottom: 10px; left: 14px; color: #738292; font-size: 11px; }
.connection-strip { display: flex; flex-wrap: wrap; gap: 8px; padding: 13px 16px; border-top: 1px solid var(--border); background: #f8fafc; }
.connection-strip button { font-size: 12px; display: flex; gap: 7px; align-items: center; }
.connection-strip button[aria-pressed="true"] { color: var(--blue); border-color: #6299c5; background: #eaf3fb; }
.dot { width: 6px; height: 6px; background: #adbac7; border-radius: 50%; }
.dot.ready { background: #427e63; }
.notice { margin-top: auto; padding: 13px 16px; color: #526679; font-size: 12px; border-top: 1px solid #dbe2e9; }
.inspector { border-left: 1px solid var(--border); background: #fff; min-width: 0; }
.inspector-title { display: flex; justify-content: space-between; padding: 14px 16px; background: #f5f7fa; border-bottom: 1px solid var(--border); }
.inspector-title span { color: var(--muted); }
.inspector-body { padding: 16px; }
.secondary { font-size: 12px; color: var(--muted); }
.endpoint { color: #435a6e; overflow-wrap: anywhere; padding: 0 0 14px; }
.endpoint div + div { margin-top: 5px; }
.section-label { font-size: 12px; color: var(--muted); margin: 16px 0 6px; }
.model-name { font-size: 18px; font-weight: 600; margin: 0 0 5px; }
.inspector-actions { display: flex; gap: 8px; flex-wrap: wrap; margin: 16px 0; }
.primary { background: #1a68a6; border-color: #1a68a6; color: #fff; }
.primary:hover { background: #145b94; }
.inspector-body p { margin: 8px 0 14px; }
.parameter-form { display: grid; gap: 12px; margin-top: 14px; }
.parameter-form label { display: grid; gap: 5px; color: #405568; font-size: 12px; }
.parameter-form input { width: 100%; border: 1px solid #bdcbd8; border-radius: 3px; padding: 7px 9px; font-size: 14px; color: #243849; }
.parameter-form input[aria-invalid="true"] { border-color: #b46d22; }
.parameter-state { font-size: 12px; padding: 8px 0; color: #7b5a2c; }
.parameter-state.valid { color: #337055; }
.check-list { display: grid; gap: 8px; }
.check-item { padding: 10px; border: 1px solid #dce3e9; border-radius: 4px; }
.check-item button { margin-top: 7px; font-size: 12px; }
.check-item.complete { border-left: 3px solid #549375; }
.check-summary { padding: 10px 0; font-weight: 600; }
.check-summary.complete { color: #337055; }
.statusbar { display: flex; gap: 12px; justify-content: space-between; padding: 8px 16px; background: #f8fafc; border-top: 1px solid var(--border); color: #657588; font-size: 12px; }
dialog { width: min(620px, calc(100vw - 32px)); padding: 0; border: 1px solid #b6c4d1; border-radius: 7px; color: #263442; background: #fff; box-shadow: 0 16px 65px #182e4533; max-height: calc(100dvh - 32px); }
dialog::backdrop { background: #1c304347; }
.dialog-header { display: flex; align-items: start; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--border); padding: 17px 20px; }
h1 { font-size: 17px; margin: 0 0 5px; font-weight: 600; }
.icon-button { border: 0; font-size: 23px; padding: 0 8px; line-height: 1.3; }
.dialog-content { padding: 16px 20px; }
.selection-context { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px; margin-bottom: 10px; font-size: 12px; }
.selection-context span { color: var(--muted); }
#model-options { display: grid; gap: 8px; }
.model-option { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; align-items: start; border: 1px solid #d3dde6; border-radius: 5px; padding: 12px; cursor: pointer; }
.model-option:has(input:checked) { border-color: #3382be; background: #f0f7fc; }
.model-option input { margin: 4px 0 0; accent-color: var(--blue); }
.model-option strong { display: inline-block; margin-right: 8px; }
.model-option small { display: block; color: #566c80; margin-top: 4px; font-size: 12px; }
.recommendation { font-size: 11px; color: #1f638f; font-weight: 400; }
.choice-note { font-size: 12px; color: #5d6b7a; margin: 12px 0; }
details { font-size: 12px; color: #5d6e80; }
summary { cursor: pointer; padding: 5px 0; }
#port-requirements { line-height: 1.8; margin: 7px 0; }
.excluded-model { display: flex; justify-content: space-between; gap: 12px; padding: 7px 0; border-top: 1px solid #e5ebf1; }
.dialog-footer { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; padding: 12px 20px; background: #f6f8fa; border-top: 1px solid var(--border); }
@media(max-width: 1000px) { .workspace { grid-template-columns: minmax(0, 1fr) 275px; } .canvas { min-height: 390px; } .workflow button { padding: 7px 12px; } .workflow-note { display: none; } .component small { display: none; } }
@media(max-width: 760px) { .workspace { display: block; } .canvas { min-height: 340px; } .inspector { border-left: 0; border-top: 1px solid var(--border); } .topbar { align-items: start; padding: 12px; } .demo-tag { display: block; margin: 3px 0 0; } .top-actions { gap: 10px; font-size: 12px; } .workflow { padding: 7px; justify-content: space-between; } .workflow button { padding: 7px 9px; gap: 5px; } .canvas-toolbar { align-items: start; } .canvas-caption { font-size: 10px; max-width: 90%; } .component strong { font-size: 11px; } .statusbar { flex-wrap: wrap; } }
@media(pointer: coarse) { button, .port { min-height: 44px; } input[type="number"] { min-height: 44px; font-size: 16px; } }