Ver código fonte

优化 CrossingDetailPanel 布局,饼图区域不受禁用蒙层影响

  - 新增 form-editable-area 层,将禁用蒙层仅作用于可编辑内容(控制方式、控制方案、阶段输入)
  - 实时方案和下周期方案的标题字号与控制方式标题统一,颜色改为白色
  - 饼图区域保持原位但在蒙层外部,始终以正常亮度显示
画安 1 semana atrás
pai
commit
e1e0699cad
1 arquivos alterados com 81 adições e 80 exclusões
  1. 81 80
      src/components/ui/CrossingDetailPanel.vue

+ 81 - 80
src/components/ui/CrossingDetailPanel.vue

@@ -32,97 +32,98 @@
                         </div>
                     </div>
 
-                    <div class="form-interactive-area" :class="{ 'is-disabled': !isManualMode }">
-                        <div class="control-method-content">
-                            <SegmentedRadio v-model="currentMethod" :options="controlMethodOptions" size="auto" />
-                        </div>
-
-                        <div class="control-scheme" :class="{ 'is-disabled': isSchemeDisabled }">
-                            <div class="control-label-wrap">
-                                <span class="control-label">控制方案</span>
-                                <DropdownSelect v-model="currentScheme" :options="schemeOptions" size="auto" />
+                    <div class="form-interactive-area">
+                        <div class="form-editable-area" :class="{ 'is-disabled': !isManualMode }">
+                            <div class="control-method-content">
+                                <SegmentedRadio v-model="currentMethod" :options="controlMethodOptions" size="auto" />
                             </div>
 
-                            <div class="time-form-bar" v-if="currentMethod === 'temp'">
-
-                                <el-date-picker v-model="startDate" type="date" placeholder="选择日期"
-                                    value-format="yyyy-MM-dd" size="small" :append-to-body="true"
-                                    :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
-                                </el-date-picker>
-
-                                <el-time-picker v-model="startTime" placeholder="选择时间"
-                                    value-format="HH:mm:ss" size="small" :append-to-body="true"
-                                    :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
-                                </el-time-picker>
-
-                                <el-date-picker v-model="endDate" type="date" placeholder="选择日期"
-                                    value-format="yyyy-MM-dd" size="small" :append-to-body="true"
-                                    :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
-                                </el-date-picker>
-
-                                <el-time-picker v-model="endTime" placeholder="选择时间"
-                                    value-format="HH:mm:ss" size="small" :append-to-body="true"
-                                    :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
-                                </el-time-picker>
-
-                                <div class="form-item-labeled">
-                                    <span class="form-label">时长</span>
-                                    <el-select v-model="duration" placeholder="请选择时长" size="small"
-                                        :popper-append-to-body="true">
-                                        <el-option v-for="d in durationOptions" :key="d" :label="d"
-                                            :value="d"></el-option>
-                                    </el-select>
+                            <div class="control-scheme" :class="{ 'is-disabled': isSchemeDisabled }">
+                                <div class="control-label-wrap">
+                                    <span class="control-label">控制方案</span>
+                                    <DropdownSelect v-model="currentScheme" :options="schemeOptions" size="auto" />
                                 </div>
 
-                                <div class="form-item-labeled">
-                                    <span class="form-label">周期</span>
-                                    <el-select v-model="period" placeholder="请选择周期" size="small"
-                                        :popper-append-to-body="true">
-                                        <el-option v-for="p in 8" :key="p" :label="'周期' + p"
-                                            :value="p"></el-option>
-                                    </el-select>
-                                </div>
+                                <div class="time-form-bar" v-if="currentMethod === 'temp'">
+
+                                    <el-date-picker v-model="startDate" type="date" placeholder="选择日期"
+                                        value-format="yyyy-MM-dd" size="small" :append-to-body="true"
+                                        :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
+                                    </el-date-picker>
+
+                                    <el-time-picker v-model="startTime" placeholder="选择时间"
+                                        value-format="HH:mm:ss" size="small" :append-to-body="true"
+                                        :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
+                                    </el-time-picker>
+
+                                    <el-date-picker v-model="endDate" type="date" placeholder="选择日期"
+                                        value-format="yyyy-MM-dd" size="small" :append-to-body="true"
+                                        :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
+                                    </el-date-picker>
+
+                                    <el-time-picker v-model="endTime" placeholder="选择时间"
+                                        value-format="HH:mm:ss" size="small" :append-to-body="true"
+                                        :popper-options="{ boundariesPadding: 0, gpuAcceleration: false }">
+                                    </el-time-picker>
+
+                                    <div class="form-item-labeled">
+                                        <span class="form-label">时长</span>
+                                        <el-select v-model="duration" placeholder="请选择时长" size="small"
+                                            :popper-append-to-body="true">
+                                            <el-option v-for="d in durationOptions" :key="d" :label="d"
+                                                :value="d"></el-option>
+                                        </el-select>
+                                    </div>
 
-                            </div>
+                                    <div class="form-item-labeled">
+                                        <span class="form-label">周期</span>
+                                        <el-select v-model="period" placeholder="请选择周期" size="small"
+                                            :popper-append-to-body="true">
+                                            <el-option v-for="p in 8" :key="p" :label="'周期' + p"
+                                                :value="p"></el-option>
+                                        </el-select>
+                                    </div>
 
-                            <div class="current-stage">
-                                <div class="current-stage-warp">
-                                    <div class="current-stage-label">当前阶段:</div>
-                                    <div v-for="(item, index) in currentStageList" :key="index"
-                                        class="stage-item-wrapper">
-                                        <div class="phase-box" :class="{ 'is-active': item.value === currentStage }"
-                                            @click="onStageClick(item.value)">
-                                            <img :src="item.img" alt="stage" class="phase-image" />
-                                        </div>
+                                </div>
 
-                                        <div class="bottom-controls">
-                                            <div class="input-unit-wrapper">
-                                                <input type="number" v-model.number="item.time" class="stage-input"
-                                                    :disabled="!canEditStage"
-                                                    :title="canEditStage ? '修改阶段时间' : '当前控制方式不可修改'" />
-                                                <span class="unit">s</span>
+                                <div class="current-stage">
+                                    <div class="current-stage-warp">
+                                        <div class="current-stage-label">当前阶段:</div>
+                                        <div v-for="(item, index) in currentStageList" :key="index"
+                                            class="stage-item-wrapper">
+                                            <div class="phase-box" :class="{ 'is-active': item.value === currentStage }"
+                                                @click="onStageClick(item.value)">
+                                                <img :src="item.img" alt="stage" class="phase-image" />
+                                            </div>
+
+                                            <div class="bottom-controls">
+                                                <div class="input-unit-wrapper">
+                                                    <input type="number" v-model.number="item.time" class="stage-input"
+                                                        :disabled="!canEditStage"
+                                                        :title="canEditStage ? '修改阶段时间' : '当前控制方式不可修改'" />
+                                                    <span class="unit">s</span>
+                                                </div>
+                                                <span class="percent">{{ stagePercent(item.time) }}</span>
                                             </div>
-                                            <span class="percent">{{ stagePercent(item.time) }}</span>
                                         </div>
                                     </div>
                                 </div>
                             </div>
+                        </div>
 
-                            <!-- 方案圆饼图 -->
-                            <div class="donut-row">
-                                <div class="donut-item">
-                                    <div class="donut-title">实时方案(执行方案3)</div>
-                                    <PlanDonutChart :chartData="realtimeDonutData"
-                                        :centerValue="String(realtimeRemaining)" centerLabel="剩余时长" :showTotal="true"
-                                        :totalValue="cycleLength" :scale="panelScale" />
-                                </div>
-                                <div class="donut-item">
-                                    <div class="donut-title">下周期方案</div>
-                                    <PlanDonutChart :chartData="nextCycleDonutData" :centerValue="String(cycleLength)"
-                                        centerLabel="总时长" :showTotal="false" :scale="panelScale" />
-                                </div>
+                        <!-- 方案圆饼图 -->
+                        <div class="donut-row">
+                            <div class="donut-item">
+                                <div class="donut-title">实时方案(执行方案3)</div>
+                                <PlanDonutChart :chartData="realtimeDonutData"
+                                    :centerValue="String(realtimeRemaining)" centerLabel="剩余时长" :showTotal="true"
+                                    :totalValue="cycleLength" :scale="panelScale" />
+                            </div>
+                            <div class="donut-item">
+                                <div class="donut-title">下周期方案</div>
+                                <PlanDonutChart :chartData="nextCycleDonutData" :centerValue="String(cycleLength)"
+                                    centerLabel="总时长" :showTotal="false" :scale="panelScale" />
                             </div>
-
                         </div>
                     </div>
 
@@ -975,7 +976,7 @@ export default {
     overflow-x: hidden;
 }
 
-.form-interactive-area.is-disabled {
+.form-editable-area.is-disabled {
     opacity: 0.6;
     pointer-events: none;
 }
@@ -1090,8 +1091,8 @@ export default {
 }
 
 .donut-title {
-    font-size: clamp(11px, calc(var(--s) * 13px), 14px);
-    color: #a0aec0;
+    font-size: clamp(12px, calc(var(--s) * 22px), 28px);
+    color: #ffffff;
     margin-bottom: 4px;
 }