#
Junjie
3 天以前 d62f97dabd206364220b74dfa0bb065d4e64dc7b
src/main/webapp/views/stationPathPolicy/stationPathPolicy.html
@@ -298,7 +298,7 @@
        }
        .preview-toolbar-row-secondary {
            grid-template-columns: minmax(280px, 360px) minmax(0, 1fr);
            grid-template-columns: 1fr;
        }
        .preview-toolbar-actions {
@@ -307,31 +307,6 @@
            justify-content: flex-end;
            align-items: center;
            flex-wrap: wrap;
        }
        .preview-zoom-card {
            display: flex;
            align-items: center;
            gap: 14px;
            padding: 10px 14px;
            border-radius: 18px;
            background: linear-gradient(180deg, rgba(247, 250, 255, 0.96) 0%, rgba(243, 248, 254, 0.96) 100%);
            border: 1px solid rgba(217, 227, 236, 0.96);
        }
        .preview-zoom-meta {
            min-width: 74px;
        }
        .preview-zoom-meta strong {
            display: block;
            font-size: 12px;
            margin-bottom: 2px;
        }
        .preview-zoom-meta span {
            font-size: 12px;
            color: var(--text-sub);
        }
        .preview-panel-body {
@@ -718,6 +693,14 @@
            grid-column: span 2;
        }
        .profile-dialog-layout {
            width: 100%;
        }
        .profile-dialog-layout .el-form {
            width: 100%;
        }
        .section-card {
            border: 1px solid rgba(219, 229, 238, 0.96);
            border-radius: 18px;
@@ -818,21 +801,15 @@
    <div class="hero-grid">
        <div class="panel-card profile-panel">
            <div class="panel-head">
                <div><h2>模板与模式</h2></div>
                <div><h2>模板配置</h2></div>
                <el-button type="primary" plain size="small" icon="el-icon-plus" @click="openProfileDialog()">新增模板</el-button>
            </div>
            <div class="panel-body">
                <div class="setting-grid">
                    <div class="section-card">
                        <h3>全局开关</h3>
                        <h3>全局配置</h3>
                        <el-form label-position="top">
                            <div class="dialog-grid">
                                <el-form-item label="评分模式" class="span-2">
                                    <el-radio-group v-model="scoreMode">
                                        <el-radio-button label="legacy">legacy</el-radio-button>
                                        <el-radio-button label="twoStage">twoStage</el-radio-button>
                                    </el-radio-group>
                                </el-form-item>
                                <el-form-item label="默认模板" class="span-2">
                                    <el-select v-model="defaultProfileCode" placeholder="请选择默认模板" filterable style="width: 100%;">
                                        <el-option v-for="item in profiles" :key="item.profileCode" :label="item.profileName + ' (' + item.profileCode + ')'" :value="item.profileCode"></el-option>
@@ -867,8 +844,9 @@
                                <el-tag size="mini" :type="defaultProfileCode === item.profileCode ? 'success' : 'info'">{{ defaultProfileCode === item.profileCode ? '默认' : '模板' }}</el-tag>
                            </div>
                            <div class="entity-desc">
                                S1: 长度 {{ item.config.s1LenWeight }} / 拐点 {{ item.config.s1TurnWeight }} / 顶升 {{ item.config.s1LiftWeight }}<br>
                                S2: 忙站 {{ item.config.s2BusyWeight }} / 堵塞 {{ item.config.s2RunBlockWeight }} / 环线 {{ item.config.s2LoopLoadWeight }}
                                S1: 长度(s1LenWeight) {{ item.config.s1LenWeight }} / 拐点(s1TurnWeight) {{ item.config.s1TurnWeight }} / 顶升(s1LiftWeight) {{ item.config.s1LiftWeight }}<br>
                                S2: 拥堵(s2BusyWeight) {{ item.config.s2BusyWeight }} / 排队(s2QueueWeight) {{ item.config.s2QueueWeight }} / 等待(s2WaitWeight) {{ item.config.s2WaitWeight }} / 死锁(s2DeadlockWeight) {{ item.config.s2DeadlockWeight }} / 堵塞(s2RunBlockWeight) {{ item.config.s2RunBlockWeight }} / 环线(s2LoopLoadWeight) {{ item.config.s2LoopLoadWeight }}<br>
                                平衡: 长度(stationPathLenWeightPercent) {{ item.config.stationPathLenWeightPercent }}% / 承载(stationPathCongWeightPercent) {{ item.config.stationPathCongWeightPercent }}% / 他出惩罚(stationPathPassOtherOutStationWeightPercent) {{ item.config.stationPathPassOtherOutStationWeightPercent }} / 强跳(stationPathPassOtherOutStationForceSkip) {{ item.config.stationPathPassOtherOutStationForceSkip ? '是' : '否' }}
                            </div>
                            <div class="entity-actions">
                                <el-button size="mini" @click.stop="openProfileDialog(item)">编辑</el-button>
@@ -935,13 +913,6 @@
                        </el-select>
                    </div>
                    <div class="preview-toolbar-row preview-toolbar-row-secondary">
                        <div class="preview-zoom-card">
                            <div class="preview-zoom-meta">
                                <strong>地图缩放</strong>
                                <span>{{ mapZoomPercent }}%</span>
                            </div>
                            <el-slider :value="mapZoomPercent" @input="updateMapZoom" :min="60" :max="220" :step="10" :show-tooltip="false" style="flex: 1;"></el-slider>
                        </div>
                        <div class="preview-toolbar-actions">
                            <el-button @click="fitMap" :disabled="!mapContext.nodes.length">适配地图</el-button>
                            <el-button @click="resetPreview">清空</el-button>
@@ -1049,7 +1020,7 @@
    </div>
    <el-dialog title="路径模板" :visible.sync="profileDialogVisible" width="820px" class="dialog-panel" append-to-body :destroy-on-close="true">
        <div class="dialog-grid">
        <div class="profile-dialog-layout">
            <el-form label-position="top" label-width="120px" style="width: 100%;">
                <div class="section-card">
                    <h3>基础信息</h3>
@@ -1075,31 +1046,44 @@
                <div class="section-card">
                    <h3>候选生成</h3>
                    <div class="dialog-grid">
                        <el-form-item label="最大深度"><el-input-number v-model="profileForm.config.calcMaxDepth" :min="20" :max="500" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="最大路径数"><el-input-number v-model="profileForm.config.calcMaxPaths" :min="10" :max="3000" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="最大代价"><el-input-number v-model="profileForm.config.calcMaxCost" :min="10" :max="5000" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="S1 保留 TopK"><el-input-number v-model="profileForm.config.s1TopK" :min="1" :max="50" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="最大深度(calcMaxDepth)"><el-input-number v-model="profileForm.config.calcMaxDepth" :min="20" :max="500" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="最大路径数(calcMaxPaths)"><el-input-number v-model="profileForm.config.calcMaxPaths" :min="10" :max="3000" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="最大代价(calcMaxCost)"><el-input-number v-model="profileForm.config.calcMaxCost" :min="10" :max="5000" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="S1 保留 TopK(s1TopK)"><el-input-number v-model="profileForm.config.s1TopK" :min="1" :max="50" style="width: 100%;"></el-input-number></el-form-item>
                    </div>
                </div>
                <div class="section-card">
                    <h3>第一阶段静态评分</h3>
                    <div class="dialog-grid">
                        <el-form-item label="长度权重"><el-input-number v-model="profileForm.config.s1LenWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="拐点权重"><el-input-number v-model="profileForm.config.s1TurnWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="顶升权重"><el-input-number v-model="profileForm.config.s1LiftWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="偏离人工路径权重"><el-input-number v-model="profileForm.config.s1SoftDeviationWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="长度放宽比例"><el-input-number v-model="profileForm.config.s1MaxLenRatio" :min="1" :step="0.05" :precision="2" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="允许多拐点数"><el-input-number v-model="profileForm.config.s1MaxTurnDiff" :min="0" :max="20" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="长度权重(s1LenWeight)"><el-input-number v-model="profileForm.config.s1LenWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="拐点权重(s1TurnWeight)"><el-input-number v-model="profileForm.config.s1TurnWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="顶升权重(s1LiftWeight)"><el-input-number v-model="profileForm.config.s1LiftWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="偏离人工路径权重(s1SoftDeviationWeight)"><el-input-number v-model="profileForm.config.s1SoftDeviationWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="长度放宽比例(s1MaxLenRatio)"><el-input-number v-model="profileForm.config.s1MaxLenRatio" :min="1" :step="0.05" :precision="2" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="允许多拐点数(s1MaxTurnDiff)"><el-input-number v-model="profileForm.config.s1MaxTurnDiff" :min="0" :max="20" style="width: 100%;"></el-input-number></el-form-item>
                    </div>
                </div>
                <div class="section-card">
                    <h3>路径平衡参数</h3>
                    <div class="dialog-grid">
                        <el-form-item label="路径长度权重占比(stationPathLenWeightPercent)"><el-input-number v-model="profileForm.config.stationPathLenWeightPercent" :min="0" :step="5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="任务承载权重占比(stationPathCongWeightPercent)"><el-input-number v-model="profileForm.config.stationPathCongWeightPercent" :min="0" :step="5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="其他出库站点惩罚权重(stationPathPassOtherOutStationWeightPercent)"><el-input-number v-model="profileForm.config.stationPathPassOtherOutStationWeightPercent" :min="0" :step="10" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="其他出库站点强制跳过(stationPathPassOtherOutStationForceSkip)"><el-switch v-model="profileForm.config.stationPathPassOtherOutStationForceSkip"></el-switch></el-form-item>
                    </div>
                </div>
                <div class="section-card">
                    <h3>第二阶段动态评分</h3>
                    <div class="dialog-grid">
                        <el-form-item label="忙站权重"><el-input-number v-model="profileForm.config.s2BusyWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="堵塞权重"><el-input-number v-model="profileForm.config.s2RunBlockWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="环线负载权重"><el-input-number v-model="profileForm.config.s2LoopLoadWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="拥堵程度权重(s2BusyWeight)"><el-input-number v-model="profileForm.config.s2BusyWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="排队量权重(s2QueueWeight)"><el-input-number v-model="profileForm.config.s2QueueWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="预计等待时间权重(s2WaitWeight)"><el-input-number v-model="profileForm.config.s2WaitWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="死锁风险权重(s2DeadlockWeight)"><el-input-number v-model="profileForm.config.s2DeadlockWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="堵塞权重(s2RunBlockWeight)"><el-input-number v-model="profileForm.config.s2RunBlockWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                        <el-form-item label="环线负载权重(s2LoopLoadWeight)"><el-input-number v-model="profileForm.config.s2LoopLoadWeight" :min="0" :step="0.5" style="width: 100%;"></el-input-number></el-form-item>
                    </div>
                </div>
            </el-form>