|
|
@@ -1,1335 +0,0 @@
|
|
|
-<template>
|
|
|
- <GlobalLayout title="干扰方案">
|
|
|
- <template #header-controls>
|
|
|
- <el-button icon="el-icon-plus" type="primary">添加知识</el-button>
|
|
|
- <el-button icon="el-icon-upload" type="success">导入</el-button>
|
|
|
- <el-button icon="el-icon-download" type="warning">导出</el-button>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 主内容区域 -->
|
|
|
- <div class="main-container">
|
|
|
- <!-- 左侧区域 -->
|
|
|
- <div class="left-section">
|
|
|
- <!-- 上半部分:任务卡片 -->
|
|
|
- <div class="task-cards-section">
|
|
|
- <!-- <h3 class="section-title">任务列表</h3>
|
|
|
- <div class="task-cards-container">
|
|
|
- <TaskCard
|
|
|
- v-for="task in tasks"
|
|
|
- :key="task.id"
|
|
|
- :task="task"
|
|
|
- @execute="executeTask"
|
|
|
- @view-details="viewDetails"
|
|
|
- />
|
|
|
- </div>-->
|
|
|
- <h3 class="section-title">干扰设备列表</h3>
|
|
|
- <div class="equipment-grid">
|
|
|
- <InterferenceEquipmentCard
|
|
|
- v-for="equip in equipmentList"
|
|
|
- :key="equip.id"
|
|
|
- :equipment="equip"
|
|
|
- @edit="handleEditEquipment"
|
|
|
- @select="handleSelectEquipment"
|
|
|
- />
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 下半部分:任务编辑区域 -->
|
|
|
- <div class="task-editor-section">
|
|
|
- <h3 class="section-title dark-title">任务配置</h3>
|
|
|
- <el-card class="editor-card dark-card" shadow="hover">
|
|
|
- <div class="editor-content">
|
|
|
- <el-form
|
|
|
- ref="taskForm"
|
|
|
- :model="currentTask"
|
|
|
- :rules="formRules"
|
|
|
- class="dark-form"
|
|
|
- label-width="120px"
|
|
|
- >
|
|
|
- <!-- 任务信息部分 -->
|
|
|
- <h4 class="form-section-title">任务信息</h4>
|
|
|
- <el-form-item label="任务名称" prop="name">
|
|
|
- <el-input v-model="currentTask.name" clearable placeholder="请输入任务名称"/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="任务类型" prop="type">
|
|
|
- <el-select v-model="currentTask.type" placeholder="请选择任务类型" style="width:100%">
|
|
|
- <el-option label="弹道导弹" value="弹道导弹"/>
|
|
|
- <el-option label="巡航导弹" value="巡航导弹"/>
|
|
|
- <el-option label="反舰导弹" value="反舰导弹"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="目标位置" prop="targetLocation">
|
|
|
- <el-input v-model="currentTask.targetLocation" clearable placeholder="请输入目标坐标"/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="预计时间" prop="estimatedTime">
|
|
|
- <el-date-picker
|
|
|
- v-model="currentTask.estimatedTime"
|
|
|
- placeholder="选择日期时间"
|
|
|
- style="width:100%"
|
|
|
- type="datetime"
|
|
|
- value-format="yyyy-MM-dd HH:mm"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="优先级" prop="priority">
|
|
|
- <el-rate v-model="currentTask.priority" :max="3" :texts="['低', '中', '高']" show-text/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="任务状态" prop="status">
|
|
|
- <el-select v-model="currentTask.status" placeholder="请选择状态" style="width:100%">
|
|
|
- <el-option label="规划中" value="规划中"/>
|
|
|
- <el-option label="准备中" value="准备中"/>
|
|
|
- <el-option label="待执行" value="待执行"/>
|
|
|
- <el-option label="已完成" value="已完成"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="任务描述" prop="description">
|
|
|
- <el-input
|
|
|
- v-model="currentTask.description"
|
|
|
- :rows="3"
|
|
|
- placeholder="请输入任务描述"
|
|
|
- type="textarea"
|
|
|
- />
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <!-- 设备信息部分 -->
|
|
|
- <h4 class="form-section-title">设备信息</h4>
|
|
|
- <el-form-item label="设备名称" prop="equipment.name">
|
|
|
- <el-input v-model="currentTask.equipment.name" clearable placeholder="请输入设备名称"/>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="设备类型" prop="equipment.type">
|
|
|
- <el-select v-model="currentTask.equipment.type" placeholder="请选择设备类型" style="width:100%">
|
|
|
- <el-option label="电子干扰设备" value="电子干扰设备"/>
|
|
|
- <el-option label="红外干扰设备" value="红外干扰设备"/>
|
|
|
- <el-option label="雷达干扰设备" value="雷达干扰设备"/>
|
|
|
- <el-option label="发烟设备" value="发烟设备"/>
|
|
|
- <el-option label="角反射器" value="角反射器"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="设备状态" prop="equipment.status">
|
|
|
- <el-select v-model="currentTask.equipment.status" placeholder="请选择设备状态" style="width:100%">
|
|
|
- <el-option label="可用" value="可用"/>
|
|
|
- <el-option label="使用中" value="使用中"/>
|
|
|
- <el-option label="维修中" value="维修中"/>
|
|
|
- <el-option label="待命" value="待命"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="频段范围" prop="equipment.frequencyRange">
|
|
|
- <el-input v-model="currentTask.equipment.frequencyRange" placeholder="如: 2-18GHz"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="干扰功率" prop="equipment.power">
|
|
|
- <el-input v-model="currentTask.equipment.power" placeholder="如: 200W"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="覆盖范围" prop="equipment.coverage">
|
|
|
- <el-input v-model="currentTask.equipment.coverage" placeholder="如: 360°"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="响应时间" prop="equipment.responseTime">
|
|
|
- <el-input v-model="currentTask.equipment.responseTime" placeholder="如: <0.5s"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="布设位置" prop="equipment.deploymentLocation">
|
|
|
- <el-input v-model="currentTask.equipment.deploymentLocation" placeholder="请输入布设位置"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="布设角度" prop="equipment.deploymentAngle">
|
|
|
- <el-input v-model="currentTask.equipment.deploymentAngle" placeholder="如: 45°"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="仰角" prop="equipment.elevation">
|
|
|
- <el-input v-model="currentTask.equipment.elevation" placeholder="如: 30°"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="方位角" prop="equipment.azimuth">
|
|
|
- <el-input v-model="currentTask.equipment.azimuth" placeholder="如: 120°"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <el-row :gutter="20">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="干扰范围" prop="equipment.interferenceRange">
|
|
|
- <el-input v-model="currentTask.equipment.interferenceRange" placeholder="如: 5km"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="重量" prop="equipment.weight">
|
|
|
- <el-input v-model="currentTask.equipment.weight" placeholder="如: 15kg"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <el-form-item label="干扰类型" prop="equipment.interferenceTypes">
|
|
|
- <el-select
|
|
|
- v-model="currentTask.equipment.interferenceTypes"
|
|
|
- multiple
|
|
|
- placeholder="请选择干扰类型"
|
|
|
- style="width:100%"
|
|
|
- >
|
|
|
- <el-option label="雷达干扰" value="雷达干扰"/>
|
|
|
- <el-option label="通信干扰" value="通信干扰"/>
|
|
|
- <el-option label="红外干扰" value="红外干扰"/>
|
|
|
- <el-option label="视觉干扰" value="视觉干扰"/>
|
|
|
- <el-option label="GPS干扰" value="GPS干扰"/>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item label="设备图片" prop="equipment.image">
|
|
|
- <el-input v-model="currentTask.equipment.image" clearable placeholder="请输入图片URL">
|
|
|
- <template #append>
|
|
|
- <el-button :disabled="!currentTask.equipment.image"
|
|
|
- @click="showImagePreview(currentTask.equipment.image)">
|
|
|
- 预览
|
|
|
- </el-button>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
- </el-form-item>
|
|
|
-
|
|
|
- <el-form-item>
|
|
|
- <el-button type="primary" @click="submitForm">保存</el-button>
|
|
|
- <el-button @click="resetForm">重置</el-button>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </div>
|
|
|
- <!-- 任务调整区域 -->
|
|
|
- <div class="task-adjustment-section">
|
|
|
- <h3 class="section-title dark-title">任务调整</h3>
|
|
|
- <el-card class="editor-card dark-card" shadow="hover">
|
|
|
- <!-- 编辑器工具栏容器 -->
|
|
|
- <div id="editor-toolbar-container"></div>
|
|
|
- <!-- 编辑器容器 -->
|
|
|
- <div id="editor-container" style="height: 300px;"></div>
|
|
|
-
|
|
|
- <div class="editor-actions">
|
|
|
- <el-button type="primary" @click="saveAdjustment">保存调整</el-button>
|
|
|
- <el-button @click="clearEditor">清空内容</el-button>
|
|
|
- </div>
|
|
|
- </el-card>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- <!-- 右侧问答区域 -->
|
|
|
- <div class="right-section">
|
|
|
- <!-- 新增切换按钮 -->
|
|
|
- <div class="toggle-button-container">
|
|
|
- <div
|
|
|
- class="toggle-button"
|
|
|
- @click="toggleContent"
|
|
|
- @mouseenter="toggleHover(true)"
|
|
|
- @mouseleave="toggleHover(false)"
|
|
|
- >
|
|
|
- <el-tooltip
|
|
|
- :content="isExpanded ? '收起' : '展开'"
|
|
|
- effect="dark"
|
|
|
- placement="left"
|
|
|
- >
|
|
|
- <i :class="buttonIcon"></i>
|
|
|
- </el-tooltip>
|
|
|
- <transition name="fade">
|
|
|
- <span v-show="isHovered || isExpanded" class="button-text">
|
|
|
- {{ buttonText }}
|
|
|
- </span>
|
|
|
- </transition>
|
|
|
- </div>
|
|
|
- </div>
|
|
|
-
|
|
|
- <!-- 内容区域 -->
|
|
|
- <!-- 在父组件中替换原来的右侧内容 -->
|
|
|
- <div v-if="showRequirements" class="requirements-section">
|
|
|
- <TaskContent
|
|
|
- :task="currentTask"
|
|
|
- :history-solutions="historySolutions"
|
|
|
- :interference-equipments="interferenceEquipments"
|
|
|
- @edit-equipment="handleEditEquipment"
|
|
|
- @select-equipment="handleSelectEquipment"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <!-- 智能问答 -->
|
|
|
- <QAChat v-else :messages="qaMessages" @question="handleQuestion" />
|
|
|
-
|
|
|
- </div>
|
|
|
- </div>
|
|
|
- </GlobalLayout>
|
|
|
-</template>
|
|
|
-
|
|
|
-<script>
|
|
|
-import E from 'wangeditor'
|
|
|
-
|
|
|
-import GlobalLayout from '@/components/Components/GlobalLayout.vue'
|
|
|
-import TaskCard from "@/components/Components/TaskCard.vue"
|
|
|
-import QAChat from "@/components/Components/QAChat.vue"
|
|
|
-import InterferenceEquipmentCard from '@/views/planningSchem/Interference/components/InterferenceEquipmentCard.vue'
|
|
|
-import TaskContent from "@/views/planningSchem/Interference/components/taskContent.vue";
|
|
|
-export default {
|
|
|
- components: {GlobalLayout, TaskCard, QAChat, InterferenceEquipmentCard, TaskContent},
|
|
|
- data() {
|
|
|
- return {
|
|
|
- editor: null,
|
|
|
- adjustmentContent: '',
|
|
|
- isHovered: false,
|
|
|
- isExpanded: false,
|
|
|
- showRequirements: true,
|
|
|
- // 模拟任务数据
|
|
|
- equipmentList: [
|
|
|
- {
|
|
|
- id: 'eq-001',
|
|
|
- name: '电子战干扰系统A型',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '2-18GHz',
|
|
|
- power: '200W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.5s',
|
|
|
- deploymentLocation: '前线阵地A区',
|
|
|
- deploymentAngle: '45°',
|
|
|
- elevation: '30°',
|
|
|
- azimuth: '120°',
|
|
|
- interferenceRange: '5km',
|
|
|
- weight: '15kg',
|
|
|
- image: 'https://example.com/equipment1.jpg',
|
|
|
- interferenceTypes: ['雷达干扰', '通信干扰']
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-002',
|
|
|
- name: '红外干扰机B型',
|
|
|
- type: '红外干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '3-5μm, 8-12μm',
|
|
|
- power: '50W',
|
|
|
- coverage: '120°',
|
|
|
- responseTime: '<0.2s',
|
|
|
- deploymentLocation: '前线阵地B区',
|
|
|
- deploymentAngle: '30°',
|
|
|
- elevation: '15°',
|
|
|
- azimuth: '90°',
|
|
|
- interferenceRange: '3km',
|
|
|
- weight: '8kg',
|
|
|
- image: 'https://example.com/equipment2.jpg',
|
|
|
- interferenceTypes: ['红外干扰']
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-003',
|
|
|
- name: '移动式发烟罐系统',
|
|
|
- type: '发烟设备',
|
|
|
- status: '待命',
|
|
|
- coverage: '500m²',
|
|
|
- responseTime: '10s',
|
|
|
- deploymentLocation: '机动部队',
|
|
|
- deploymentAngle: '0°',
|
|
|
- elevation: '0°',
|
|
|
- azimuth: '0°',
|
|
|
- interferenceRange: '1km',
|
|
|
- weight: '25kg',
|
|
|
- image: 'https://example.com/equipment3.jpg',
|
|
|
- interferenceTypes: ['视觉干扰', '红外干扰']
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-004',
|
|
|
- name: '角反射器阵列',
|
|
|
- type: '角反射器',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '1-18GHz',
|
|
|
- coverage: '全向',
|
|
|
- responseTime: '即时',
|
|
|
- deploymentLocation: '沿海防御区',
|
|
|
- deploymentAngle: '60°',
|
|
|
- elevation: '10°',
|
|
|
- azimuth: '180°',
|
|
|
- interferenceRange: '10km',
|
|
|
- weight: '10kg',
|
|
|
- image: 'https://example.com/equipment4.jpg',
|
|
|
- interferenceTypes: ['雷达干扰']
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-005',
|
|
|
- name: '多功能干扰系统',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '使用中',
|
|
|
- frequencyRange: '1-40GHz',
|
|
|
- power: '500W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.3s',
|
|
|
- deploymentLocation: '指挥中心',
|
|
|
- deploymentAngle: '90°',
|
|
|
- elevation: '45°',
|
|
|
- azimuth: '270°',
|
|
|
- interferenceRange: '8km',
|
|
|
- weight: '30kg',
|
|
|
- image: 'https://example.com/equipment5.jpg',
|
|
|
- interferenceTypes: ['雷达干扰', '通信干扰', 'GPS干扰']
|
|
|
- },
|
|
|
- ],
|
|
|
- historySolutions: [
|
|
|
- {
|
|
|
- time: '2023-05-10 14:30',
|
|
|
- description: '针对雷达制导导弹的干扰方案',
|
|
|
- equipments: [
|
|
|
- {
|
|
|
- id: 'eq-001',
|
|
|
- name: '电子战干扰系统A型',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '2-18GHz',
|
|
|
- power: '200W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.5s'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-004',
|
|
|
- name: '角反射器阵列',
|
|
|
- type: '角反射器',
|
|
|
- status: '可用',
|
|
|
- coverage: '全向',
|
|
|
- responseTime: '即时'
|
|
|
- }
|
|
|
- ]
|
|
|
- },
|
|
|
- {
|
|
|
- time: '2023-04-28 09:15',
|
|
|
- description: '针对红外制导导弹的干扰方案',
|
|
|
- equipments: [
|
|
|
- {
|
|
|
- id: 'eq-002',
|
|
|
- name: '红外干扰机B型',
|
|
|
- type: '红外干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '3-5μm, 8-12μm',
|
|
|
- power: '50W',
|
|
|
- coverage: '120°',
|
|
|
- responseTime: '<0.2s'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-003',
|
|
|
- name: '移动式发烟罐系统',
|
|
|
- type: '发烟设备',
|
|
|
- status: '待命',
|
|
|
- coverage: '500m²',
|
|
|
- responseTime: '10s'
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- ],
|
|
|
- interferenceEquipments: [
|
|
|
- {
|
|
|
- id: 'eq-001',
|
|
|
- name: '电子战干扰系统A型',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '2-18GHz',
|
|
|
- power: '200W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.5s'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-005',
|
|
|
- name: '多功能干扰系统',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '使用中',
|
|
|
- frequencyRange: '1-40GHz',
|
|
|
- power: '500W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.3s'
|
|
|
- },
|
|
|
- {
|
|
|
- id: 'eq-002',
|
|
|
- name: '红外干扰机B型',
|
|
|
- type: '红外干扰设备',
|
|
|
- status: '可用',
|
|
|
- frequencyRange: '3-5μm, 8-12μm',
|
|
|
- power: '50W',
|
|
|
- coverage: '120°',
|
|
|
- responseTime: '<0.2s'
|
|
|
- }
|
|
|
- ],
|
|
|
- // 当前编辑的任务
|
|
|
- currentTask: {
|
|
|
- id: 'task-2023-001',
|
|
|
- name: "东海舰队反导拦截任务",
|
|
|
- description: "针对本次试验为新型弹道导弹实战化打击效能验证,在东海预定靶场海域模拟高对抗环境下的导弹攻击全流程。试验将重点考核导弹在复杂电磁环境中的突防能力、多模复合制导系统的抗干扰性能以及战斗部对典型海上目标的毁伤效果,同步验证靶场测控设备对高速机动目标的跟踪精度和毁伤评估能力。试验要求所有监测设备在导弹进入末段弹道前完成战备状态,确保完整采集从发射到命中的全过程数据。",
|
|
|
- type: "弹道导弹",
|
|
|
- targetLocation: "东经122.5°,北纬28.3°",
|
|
|
- estimatedTime: "2023-06-15 14:30",
|
|
|
- priority: 2,
|
|
|
- status: "准备中",
|
|
|
- equipment: {
|
|
|
- id: 'eq-005',
|
|
|
- name: '多功能干扰系统',
|
|
|
- type: '电子干扰设备',
|
|
|
- status: '使用中',
|
|
|
- frequencyRange: '1-40GHz',
|
|
|
- power: '500W',
|
|
|
- coverage: '360°',
|
|
|
- responseTime: '<0.3s',
|
|
|
- deploymentLocation: '东海舰队旗舰甲板',
|
|
|
- deploymentAngle: '90°',
|
|
|
- elevation: '45°',
|
|
|
- azimuth: '270°',
|
|
|
- interferenceRange: '8km',
|
|
|
- weight: '30kg',
|
|
|
- image: 'https://example.com/multifunctional-jammer.jpg',
|
|
|
- interferenceTypes: ['雷达干扰', '通信干扰', 'GPS干扰']
|
|
|
- }
|
|
|
- },
|
|
|
- formRules: {
|
|
|
- name: [
|
|
|
- {required: true, message: '请输入任务名称', trigger: 'blur'},
|
|
|
- {min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur'}
|
|
|
- ],
|
|
|
- type: [
|
|
|
- {required: true, message: '请选择任务类型', trigger: 'change'}
|
|
|
- ],
|
|
|
- targetLocation: [
|
|
|
- {required: true, message: '请输入目标位置', trigger: 'blur'}
|
|
|
- ],
|
|
|
- estimatedTime: [
|
|
|
- {required: true, message: '请选择预计时间', trigger: 'change'}
|
|
|
- ],
|
|
|
- 'equipment.name': [
|
|
|
- {required: true, message: '请输入设备名称', trigger: 'blur'}
|
|
|
- ],
|
|
|
- 'equipment.type': [
|
|
|
- {required: true, message: '请选择设备类型', trigger: 'change'}
|
|
|
- ],
|
|
|
- 'equipment.status': [
|
|
|
- {required: true, message: '请选择设备状态', trigger: 'change'}
|
|
|
- ],
|
|
|
- 'equipment.frequencyRange': [
|
|
|
- {required: true, message: '请输入频段范围', trigger: 'blur'}
|
|
|
- ],
|
|
|
- 'equipment.interferenceTypes': [
|
|
|
- {type: 'array', required: true, message: '请至少选择一种干扰类型', trigger: 'change'}
|
|
|
- ]
|
|
|
- },
|
|
|
- // 暂存的任务数据
|
|
|
- stashedTask: null,
|
|
|
- // 问答数据
|
|
|
- qaMessages: [
|
|
|
- {
|
|
|
- type: "answer",
|
|
|
- content: "欢迎使用导弹打击系统智能助手,请问有什么可以帮助您的?",
|
|
|
- time: "09:00"
|
|
|
- }
|
|
|
- ]
|
|
|
- }
|
|
|
- },
|
|
|
- computed: {
|
|
|
- buttonIcon() {
|
|
|
- return this.showRequirements ? 'el-icon-chat-line-round' : 'el-icon-tickets'
|
|
|
- },
|
|
|
- buttonText() {
|
|
|
- return this.showRequirements ? '智能问答' : '任务要求'
|
|
|
- }
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.initEditor()
|
|
|
- },
|
|
|
- beforeDestroy() {
|
|
|
- // 组件销毁时销毁编辑器
|
|
|
- if (this.editor) {
|
|
|
- this.editor.destroy()
|
|
|
- this.editor = null
|
|
|
- }
|
|
|
- },
|
|
|
- methods: {
|
|
|
- initEditor() {
|
|
|
- // 确保DOM已经渲染完成
|
|
|
- this.$nextTick(() => {
|
|
|
- this.editor = new E('#editor-toolbar-container', '#editor-container')
|
|
|
-
|
|
|
- // 自定义配置
|
|
|
- this.editor.config.zIndex = 100
|
|
|
- this.editor.config.placeholder = '请输入任务调整内容...'
|
|
|
- this.editor.config.uploadImgShowBase64 = true // 使用 base64 保存图片
|
|
|
- this.editor.config.uploadImgServer = '/api/upload' // 你的图片上传接口
|
|
|
- this.editor.config.uploadFileName = 'file' // 上传图片的参数名
|
|
|
-
|
|
|
- // 自定义菜单
|
|
|
- this.editor.config.menus = [
|
|
|
- 'head', // 标题
|
|
|
- 'bold', // 粗体
|
|
|
- 'italic', // 斜体
|
|
|
- 'underline', // 下划线
|
|
|
- 'strikeThrough', // 删除线
|
|
|
- 'foreColor', // 文字颜色
|
|
|
- 'backColor', // 背景颜色
|
|
|
- 'link', // 插入链接
|
|
|
- 'list', // 列表
|
|
|
- 'justify', // 对齐方式
|
|
|
- 'quote', // 引用
|
|
|
- 'image', // 插入图片
|
|
|
- 'table', // 表格
|
|
|
- 'code', // 插入代码
|
|
|
- 'undo', // 撤销
|
|
|
- 'redo' // 重复
|
|
|
- ]
|
|
|
-
|
|
|
- // 监听内容变化
|
|
|
- this.editor.config.onchange = (html) => {
|
|
|
- this.adjustmentContent = html
|
|
|
- }
|
|
|
-
|
|
|
- // 创建编辑器
|
|
|
- this.editor.create()
|
|
|
-
|
|
|
- // 设置暗黑主题样式
|
|
|
- this.setEditorDarkTheme()
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- setEditorDarkTheme() {
|
|
|
- // 设置编辑器暗黑主题
|
|
|
- const editorContainer = document.querySelector('#editor-container .w-e-text-container')
|
|
|
- if (editorContainer) {
|
|
|
- editorContainer.style.backgroundColor = '#1f2a38'
|
|
|
- editorContainer.style.color = '#e0e6ed'
|
|
|
- editorContainer.style.borderColor = '#425163'
|
|
|
- }
|
|
|
-
|
|
|
- const toolbar = document.querySelector('#editor-toolbar-container .w-e-toolbar')
|
|
|
- if (toolbar) {
|
|
|
- toolbar.style.backgroundColor = '#2d3a4b'
|
|
|
- toolbar.style.borderColor = '#425163'
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- saveAdjustment() {
|
|
|
- if (!this.adjustmentContent) {
|
|
|
- this.$message.warning('请填写调整内容')
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- // 这里添加保存逻辑,例如:
|
|
|
- this.currentTask.adjustment = this.adjustmentContent
|
|
|
- this.$message.success('任务调整已保存')
|
|
|
-
|
|
|
- // 或者调用API保存
|
|
|
- // this.saveTaskAdjustmentToServer()
|
|
|
- },
|
|
|
-
|
|
|
- clearEditor() {
|
|
|
- this.editor.txt.clear()
|
|
|
- this.adjustmentContent = ''
|
|
|
- },
|
|
|
- submitForm() {
|
|
|
- this.$refs.taskForm.validate(valid => {
|
|
|
- if (valid) {
|
|
|
- this.saveTask()
|
|
|
- } else {
|
|
|
- this.$message.error('请检查表单填写是否正确')
|
|
|
- return false
|
|
|
- }
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- showImagePreview(url) {
|
|
|
- if (url) {
|
|
|
- this.$alert(`<img src="${url}" style="max-width:100%">`, '图片预览', {
|
|
|
- dangerouslyUseHTMLString: true,
|
|
|
- customClass: 'image-preview-modal'
|
|
|
- })
|
|
|
- }
|
|
|
- },
|
|
|
- handleSelectEquipment(equip) {
|
|
|
- this.$message.success(`已选用设备: ${equip.name}`)
|
|
|
- // 处理设备选用逻辑
|
|
|
- },
|
|
|
- handleEditEquipment(equipment) {
|
|
|
- // 深拷贝设备数据
|
|
|
- this.currentTask.equipment = JSON.parse(JSON.stringify(equipment))
|
|
|
-
|
|
|
- // 可选:自动切换到设备标签页
|
|
|
- // 需要给el-tabs添加ref="taskTabs"
|
|
|
- // this.$refs.taskTabs.setActiveName('1') // '1'是设备标签页的name
|
|
|
-
|
|
|
- this.$message.success(`正在编辑设备: ${equipment.name}`)
|
|
|
- },
|
|
|
- handleUploadSuccess(file) {
|
|
|
- this.$message.success(`图片 ${file.name} 上传成功`)
|
|
|
- // 可以在这里添加额外的处理逻辑,比如:
|
|
|
-
|
|
|
- // 1. 自动将第一张上传的图片设为封面
|
|
|
- if (this.currentTask.images.length === 1 && !this.currentTask.coverImage) {
|
|
|
- this.currentTask.coverImage = this.currentTask.images[0].url
|
|
|
- this.$message.info('已自动设置为封面图片')
|
|
|
- }
|
|
|
-
|
|
|
- // 2. 触发自动保存
|
|
|
- // this.autoSaveTask()
|
|
|
-
|
|
|
- // 3. 记录上传日志
|
|
|
- // this.logAction(`上传图片: ${file.name}`)
|
|
|
- },
|
|
|
- executeTask(task) {
|
|
|
- this.$message.success(`开始执行任务: ${task.name}`)
|
|
|
- // 实际执行逻辑...
|
|
|
- },
|
|
|
-
|
|
|
- viewDetails(task) {
|
|
|
- // 保存当前编辑内容到暂存区
|
|
|
- if (this.currentTask.id && this.hasChanges(this.currentTask)) {
|
|
|
- this.stashedTask = JSON.parse(JSON.stringify(this.currentTask))
|
|
|
- this.$message.info(`已暂存当前编辑的任务: ${this.currentTask.name}`)
|
|
|
- }
|
|
|
-
|
|
|
- // 加载新任务到编辑区
|
|
|
- this.currentTask = JSON.parse(JSON.stringify(task))
|
|
|
- this.$message.info(`正在编辑任务: ${task.name}`)
|
|
|
- },
|
|
|
-
|
|
|
- hasChanges(task) {
|
|
|
- // 检查任务是否有修改
|
|
|
- if (!task.id) return false
|
|
|
- const original = this.tasks.find(t => t.id === task.id)
|
|
|
- if (!original) return true
|
|
|
-
|
|
|
- return Object.keys(task).some(key => {
|
|
|
- return JSON.stringify(task[key]) !== JSON.stringify(original[key])
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- saveTask() {
|
|
|
- this.$refs.taskForm.validate(valid => {
|
|
|
- if (!valid) {
|
|
|
- this.$message.warning("请填写完整的任务信息")
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- if (this.currentTask.id) {
|
|
|
- // 更新现有任务
|
|
|
- const index = this.tasks.findIndex(t => t.id === this.currentTask.id)
|
|
|
- if (index !== -1) {
|
|
|
- this.tasks.splice(index, 1, {...this.currentTask})
|
|
|
- this.$message.success(`任务 "${this.currentTask.name}" 更新成功`)
|
|
|
- }
|
|
|
- } else {
|
|
|
- // 新增任务
|
|
|
- this.currentTask.id = Date.now() // 使用时间戳作为临时ID
|
|
|
- this.tasks.push({...this.currentTask})
|
|
|
- this.$message.success(`任务 "${this.currentTask.name}" 创建成功`)
|
|
|
- }
|
|
|
-
|
|
|
- this.resetForm()
|
|
|
- })
|
|
|
- },
|
|
|
-
|
|
|
- stashTask() {
|
|
|
- if (!this.currentTask.name) {
|
|
|
- this.$message.warning("请至少填写任务名称")
|
|
|
- return
|
|
|
- }
|
|
|
-
|
|
|
- this.stashedTask = JSON.parse(JSON.stringify(this.currentTask))
|
|
|
- this.$message.success("任务已暂存")
|
|
|
-
|
|
|
- // 如果是暂存新任务,重置表单
|
|
|
- if (!this.currentTask.id) {
|
|
|
- this.resetForm()
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- applyStashedTask() {
|
|
|
- if (this.stashedTask) {
|
|
|
- this.currentTask = JSON.parse(JSON.stringify(this.stashedTask))
|
|
|
- this.stashedTask = null
|
|
|
- this.$message.success("已恢复暂存的任务")
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- resetForm() {
|
|
|
- this.$refs.taskForm.resetFields()
|
|
|
- this.currentTask = {
|
|
|
- id: null,
|
|
|
- name: "",
|
|
|
- description: "",
|
|
|
- type: "",
|
|
|
- targetLocation: "",
|
|
|
- estimatedTime: "",
|
|
|
- priority: 1,
|
|
|
- status: "规划中"
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- handleQuestion(question) {
|
|
|
- // 添加用户问题到聊天记录
|
|
|
- this.qaMessages.push({
|
|
|
- type: "question",
|
|
|
- content: question,
|
|
|
- time: new Date().toLocaleTimeString('zh-CN', {hour12: false})
|
|
|
- })
|
|
|
-
|
|
|
- // 模拟AI回答
|
|
|
- setTimeout(() => {
|
|
|
- const answer = this.generateAnswer(question)
|
|
|
- this.$refs.qaChat.addAnswer(answer)
|
|
|
- }, 800)
|
|
|
- },
|
|
|
-
|
|
|
- generateAnswer(question) {
|
|
|
- if (question.includes("东风")) {
|
|
|
- return "东风系列导弹是中国自主研发的洲际弹道导弹,具有射程远、精度高的特点。"
|
|
|
- } else if (question.includes("巡航")) {
|
|
|
- return "巡航导弹具有飞行高度低、突防能力强的特点,适合精确打击高价值目标。"
|
|
|
- } else if (question.includes("反舰")) {
|
|
|
- return "反舰导弹专门用于攻击海上舰艇目标,具备较强的抗干扰能力和精确制导系统。"
|
|
|
- } else {
|
|
|
- return "关于导弹打击系统的问题,我已经记录,稍后会有专业人员为您解答。"
|
|
|
- }
|
|
|
- },
|
|
|
-
|
|
|
- clearHistory() {
|
|
|
- this.qaMessages = [{
|
|
|
- type: "answer",
|
|
|
- content: "对话记录已清空,如有其他问题请继续提问。",
|
|
|
- time: new Date().toLocaleTimeString('zh-CN', {hour12: false})
|
|
|
- }]
|
|
|
- },
|
|
|
-
|
|
|
- handleEmptyQuestion() {
|
|
|
- this.$message.warning("请输入问题内容")
|
|
|
- },
|
|
|
- toggleHover(state) {
|
|
|
- this.isHovered = state
|
|
|
- },
|
|
|
-
|
|
|
- toggleContent() {
|
|
|
- this.showRequirements = !this.showRequirements
|
|
|
- this.isExpanded = true
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-</script>
|
|
|
-
|
|
|
-<style scoped>
|
|
|
-/*干扰设备卡片*/
|
|
|
-.equipment-container {
|
|
|
- padding: 15px;
|
|
|
-}
|
|
|
-
|
|
|
-.form-section-title {
|
|
|
- color: #409EFF;
|
|
|
- margin: 20px 0 15px;
|
|
|
- padding-bottom: 10px;
|
|
|
- border-bottom: 1px solid #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.el-row {
|
|
|
- margin-bottom: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-/* 图片预览模态框样式 */
|
|
|
-::v-deep.image-preview-modal {
|
|
|
- width: auto;
|
|
|
- max-width: 80%;
|
|
|
-}
|
|
|
-
|
|
|
-::v-deep.image-preview-modal .el-message-box__content {
|
|
|
- text-align: center;
|
|
|
-}
|
|
|
-
|
|
|
-.equipment-grid {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
|
- gap: 15px;
|
|
|
-}
|
|
|
-
|
|
|
-.section-title {
|
|
|
- margin: 0 0 15px 0;
|
|
|
- font-size: 18px;
|
|
|
- color: #ffffff;
|
|
|
- padding-bottom: 10px;
|
|
|
- border-bottom: 1px solid #ebeef5;
|
|
|
-}
|
|
|
-
|
|
|
-/*干扰设备卡片*/
|
|
|
-/* 新增切换按钮样式 */
|
|
|
-.toggle-button-container {
|
|
|
- position: absolute;
|
|
|
- right: 0;
|
|
|
- top: 50%;
|
|
|
- transform: translateY(-50%);
|
|
|
- z-index: 10;
|
|
|
-}
|
|
|
-
|
|
|
-.toggle-button {
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- padding: 12px 8px;
|
|
|
- background-color: #409EFF;
|
|
|
- color: white;
|
|
|
- border-radius: 4px 0 0 4px;
|
|
|
- cursor: pointer;
|
|
|
- transition: all 0.3s ease;
|
|
|
- box-shadow: -2px 0 8px rgba(0, 0, 0, 0.1);
|
|
|
-}
|
|
|
-
|
|
|
-.toggle-button:hover {
|
|
|
- background-color: #66b1ff;
|
|
|
-}
|
|
|
-
|
|
|
-.toggle-button i {
|
|
|
- font-size: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-.button-text {
|
|
|
- margin-left: 8px;
|
|
|
- white-space: nowrap;
|
|
|
- font-size: 14px;
|
|
|
-}
|
|
|
-
|
|
|
-.fade-enter-active, .fade-leave-active {
|
|
|
- transition: opacity 0.3s;
|
|
|
-}
|
|
|
-
|
|
|
-.fade-enter, .fade-leave-to {
|
|
|
- opacity: 0;
|
|
|
-}
|
|
|
-
|
|
|
-/* 调整右侧区域布局 */
|
|
|
-.right-section {
|
|
|
- position: relative;
|
|
|
- height: 100%;
|
|
|
-}
|
|
|
-
|
|
|
-.toggle-content {
|
|
|
- height: 100%;
|
|
|
- padding-left: 40px; /* 为按钮留出空间 */
|
|
|
-}
|
|
|
-
|
|
|
-.requirements-section {
|
|
|
- height: 100%;
|
|
|
- padding: 20px;
|
|
|
- background-color: #2d3a4b;
|
|
|
- color: #e0e6ed;
|
|
|
- border-radius: 4px;
|
|
|
-}
|
|
|
-
|
|
|
-.requirements-section h3 {
|
|
|
- margin-top: 0;
|
|
|
- padding-bottom: 10px;
|
|
|
- border-bottom: 1px solid #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.requirements-section ul {
|
|
|
- padding-left: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-.requirements-section li {
|
|
|
- margin-bottom: 8px;
|
|
|
-}
|
|
|
-
|
|
|
-/* 切换按钮样式 */
|
|
|
-
|
|
|
-/*编辑区主题样式*/
|
|
|
-.dark-card {
|
|
|
- background-color: #2d3a4b;
|
|
|
- border: 1px solid #425163;
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-card ::v-deep .el-card__header {
|
|
|
- background-color: #1f2a38;
|
|
|
- border-bottom: 1px solid #425163;
|
|
|
- color: #ffffff;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-title {
|
|
|
- color: #ffffff;
|
|
|
- border-bottom: 1px solid #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-form-item__label {
|
|
|
- color: #8796ad;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-input__inner,
|
|
|
-.dark-form ::v-deep .el-textarea__inner,
|
|
|
-.dark-form ::v-deep .el-select .el-input__inner {
|
|
|
- background-color: #1f2a38;
|
|
|
- border: 1px solid #425163;
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-input__inner::placeholder,
|
|
|
-.dark-form ::v-deep .el-textarea__inner::placeholder {
|
|
|
- color: #606d82;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-date-editor .el-input__inner,
|
|
|
-.dark-form ::v-deep .el-date-editor .el-input__prefix,
|
|
|
-.dark-form ::v-deep .el-date-editor .el-input__suffix {
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-rate__item .el-rate__icon {
|
|
|
- color: #606d82;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-rate__item.is-on .el-rate__icon {
|
|
|
- color: #f7ba2a;
|
|
|
-}
|
|
|
-
|
|
|
-/* 按钮样式调整 */
|
|
|
-.dark-form ::v-deep .el-button {
|
|
|
- border: 1px solid;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button--primary {
|
|
|
- background-color: #3475b5;
|
|
|
- border-color: #3475b5;
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button--primary:hover {
|
|
|
- background-color: #4084c9;
|
|
|
- border-color: #4084c9;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button--info {
|
|
|
- background-color: #425163;
|
|
|
- border-color: #5a6b7d;
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button--info:hover {
|
|
|
- background-color: #5a6b7d;
|
|
|
- border-color: #677a8c;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button:not(.el-button--primary):not(.el-button--info) {
|
|
|
- background-color: transparent;
|
|
|
- border-color: #5a6b7d;
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-form ::v-deep .el-button:not(.el-button--primary):not(.el-button--info):hover {
|
|
|
- border-color: #677a8c;
|
|
|
- color: #ffffff;
|
|
|
-}
|
|
|
-
|
|
|
-/*编辑区主题样式*/
|
|
|
-.main-container {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: 60% 40%; /* 6:4 比例 */
|
|
|
- gap: 20px;
|
|
|
- height: calc(100vh - 120px); /* 减去header和footer的高度 */
|
|
|
- padding: 20px;
|
|
|
- box-sizing: border-box;
|
|
|
-}
|
|
|
-
|
|
|
-.left-section {
|
|
|
- /*display: grid;*/
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- /*grid-template-rows: 1fr 1fr;*/ /* 上下两部分等高 */
|
|
|
- gap: 20px;
|
|
|
- /*height: 100%;*/
|
|
|
-}
|
|
|
-
|
|
|
-.right-section {
|
|
|
- height: 100%;
|
|
|
-}
|
|
|
-
|
|
|
-/* 任务卡片区域 */
|
|
|
-.task-cards-section {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- /*height: 100%;*/
|
|
|
-}
|
|
|
-
|
|
|
-.task-cards-container {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
|
- gap: 15px;
|
|
|
- overflow-y: auto;
|
|
|
- padding: 10px;
|
|
|
- flex: 1;
|
|
|
-}
|
|
|
-
|
|
|
-/* 任务编辑区域 */
|
|
|
-.task-editor-section {
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
- height: 100%;
|
|
|
-}
|
|
|
-
|
|
|
-.editor-card {
|
|
|
- flex: 1;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
-}
|
|
|
-
|
|
|
-.editor-content {
|
|
|
- flex: 1;
|
|
|
- overflow-y: auto;
|
|
|
- padding: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-/* 滚动条样式 */
|
|
|
-::-webkit-scrollbar {
|
|
|
- width: 6px;
|
|
|
- height: 6px;
|
|
|
-}
|
|
|
-
|
|
|
-::-webkit-scrollbar-thumb {
|
|
|
- background-color: #c1c1c1;
|
|
|
- border-radius: 3px;
|
|
|
-}
|
|
|
-
|
|
|
-::-webkit-scrollbar-track {
|
|
|
- background-color: #f1f1f1;
|
|
|
-}
|
|
|
-
|
|
|
-/* 右侧区域样式 */
|
|
|
-.requirements-section {
|
|
|
- height: 100%;
|
|
|
- padding: 20px;
|
|
|
- background-color: #2d3a4b;
|
|
|
- color: #e0e6ed;
|
|
|
- border-radius: 4px;
|
|
|
- overflow-y: auto;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-.task-description p {
|
|
|
- line-height: 1.6;
|
|
|
- color: #c0c4cc;
|
|
|
-}
|
|
|
-
|
|
|
-/* 描述列表样式 */
|
|
|
-
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__header) {
|
|
|
- margin-bottom: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__label) {
|
|
|
- color: #8796ad;
|
|
|
- width: 100px;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__content) {
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-/* 历史方案样式 */
|
|
|
-.solution-card {
|
|
|
- background-color: #1f2a38;
|
|
|
- border: 1px solid #425163;
|
|
|
- margin-bottom: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-.solution-content p {
|
|
|
- margin-bottom: 15px;
|
|
|
- color: #c0c4cc;
|
|
|
-}
|
|
|
-
|
|
|
-/* 推荐设备样式 */
|
|
|
-.recommended-equipments .equipment-grid {
|
|
|
- display: grid;
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
|
|
|
- gap: 15px;
|
|
|
-}
|
|
|
-
|
|
|
-/* 时间线样式 */
|
|
|
-::v-deep(.el-timeline) {
|
|
|
- padding-left: 10px;
|
|
|
-}
|
|
|
-
|
|
|
-::v-deep(.el-timeline-item__timestamp) {
|
|
|
- color: #8796ad;
|
|
|
- margin-bottom: 5px;
|
|
|
-}
|
|
|
-
|
|
|
-/* 右侧区域样式 */
|
|
|
-/* 深色描述列表样式 */
|
|
|
-.dark-descriptions {
|
|
|
- margin-top: 10px;
|
|
|
- background-color: #1f2a38;
|
|
|
- border-color: #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__header) {
|
|
|
- margin-bottom: 10px;
|
|
|
- color: #ffffff;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__body) {
|
|
|
- background-color: #1f2a38;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__table) {
|
|
|
- border-color: #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__table tr) {
|
|
|
- background-color: #1f2a38;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__table th.el-descriptions-item__cell) {
|
|
|
- background-color: #1f2a38;
|
|
|
- border-color: #425163;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__table td.el-descriptions-item__cell) {
|
|
|
- border-color: #425163;
|
|
|
-}
|
|
|
-
|
|
|
-/* 标签样式 */
|
|
|
-.dark-label {
|
|
|
- color: #8796ad !important;
|
|
|
- width: 100px;
|
|
|
- background-color: #1f2a38 !important;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-descriptions ::v-deep(.el-descriptions__content) {
|
|
|
- color: #e0e6ed;
|
|
|
-}
|
|
|
-
|
|
|
-/* 深色评分组件 */
|
|
|
-.dark-rate ::v-deep(.el-rate__icon) {
|
|
|
- color: #606d82;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-rate ::v-deep(.el-rate__item.is-on .el-rate__icon) {
|
|
|
- color: #f7ba2a;
|
|
|
-}
|
|
|
-
|
|
|
-/* 状态标签样式 */
|
|
|
-.dark-tag {
|
|
|
- border: none;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-tag.el-tag--success {
|
|
|
- background-color: #2b4a2e;
|
|
|
- color: #67c23a;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-tag.el-tag--warning {
|
|
|
- background-color: #4a3e2b;
|
|
|
- color: #e6a23c;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-tag.el-tag--danger {
|
|
|
- background-color: #4a2b2b;
|
|
|
- color: #f56c6c;
|
|
|
-}
|
|
|
-
|
|
|
-.dark-tag.el-tag--info {
|
|
|
- background-color: #2b3a4a;
|
|
|
- color: #909399;
|
|
|
-}
|
|
|
-/* 富文本编辑器区域 */
|
|
|
-.task-adjustment-section {
|
|
|
- margin-top: 20px;
|
|
|
-}
|
|
|
-
|
|
|
-#editor-toolbar-container {
|
|
|
- border: 1px solid #425163;
|
|
|
- border-bottom: none;
|
|
|
-}
|
|
|
-
|
|
|
-#editor-container {
|
|
|
- border: 1px solid #425163;
|
|
|
- border-top: none;
|
|
|
-}
|
|
|
-
|
|
|
-.editor-actions {
|
|
|
- margin-top: 15px;
|
|
|
- text-align: right;
|
|
|
-}
|
|
|
-
|
|
|
-/* 暗黑主题适配 */
|
|
|
-.w-e-menu {
|
|
|
- color: #e0e6ed !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-drop-list {
|
|
|
- background-color: #2d3a4b !important;
|
|
|
- border-color: #425163 !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-drop-list .w-e-droplist-item {
|
|
|
- color: #e0e6ed !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-drop-list .w-e-droplist-item:hover {
|
|
|
- background-color: #409EFF !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal {
|
|
|
- background-color: #2d3a4b !important;
|
|
|
- border-color: #425163 !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal .w-e-modal-title {
|
|
|
- color: #e0e6ed !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal .w-e-modal-close {
|
|
|
- color: #e0e6ed !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal .w-e-modal-body {
|
|
|
- background-color: #1f2a38 !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal .w-e-modal-footer button {
|
|
|
- background-color: #3475b5 !important;
|
|
|
- border-color: #3475b5 !important;
|
|
|
- color: #e0e6ed !important;
|
|
|
-}
|
|
|
-
|
|
|
-.w-e-modal .w-e-modal-footer button:hover {
|
|
|
- background-color: #4084c9 !important;
|
|
|
- border-color: #4084c9 !important;
|
|
|
-}
|
|
|
-
|
|
|
-/* 响应式设计 */
|
|
|
-@media (max-width: 1200px) {
|
|
|
- .main-container {
|
|
|
- grid-template-columns: 1fr;
|
|
|
- grid-template-rows: auto auto;
|
|
|
- }
|
|
|
-
|
|
|
- .left-section {
|
|
|
- grid-template-rows: auto auto;
|
|
|
- }
|
|
|
-
|
|
|
- .task-cards-container {
|
|
|
- grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
|
|
|
- }
|
|
|
-
|
|
|
- .right-section {
|
|
|
- margin-top: 20px;
|
|
|
- }
|
|
|
-}
|
|
|
-</style>
|