|
|
@@ -0,0 +1,848 @@
|
|
|
+<template>
|
|
|
+ <div>
|
|
|
+ <DarkLayout :query-form="queryForm">
|
|
|
+ <!-- 查询表单插槽 -->
|
|
|
+ <template #query-form>
|
|
|
+ <el-form-item label="任务名称">
|
|
|
+ <el-input
|
|
|
+ v-model="queryForm.name"
|
|
|
+ placeholder="请输入任务名称"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="任务代号">
|
|
|
+ <el-input
|
|
|
+ v-model="queryForm.taskCode"
|
|
|
+ placeholder="请输入任务代号"
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- Header右侧操作按钮 -->
|
|
|
+ <template #header-actions>
|
|
|
+ <el-button icon="el-icon-search" @click="handleQuery">
|
|
|
+ 查询
|
|
|
+ </el-button>
|
|
|
+
|
|
|
+ <el-button
|
|
|
+ @click="resetQuery"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ type="danger"
|
|
|
+ > 重置 </el-button>
|
|
|
+<!-- <el-button
|
|
|
+ @click="addTask"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ type="danger"
|
|
|
+ > 创建方案 </el-button>-->
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- 主要内容 - 使用Tailwind优化卡片布局 -->
|
|
|
+ <template #main>
|
|
|
+ <ImportTaskCard
|
|
|
+ v-for="plan in planList"
|
|
|
+ :key="plan.id"
|
|
|
+ :plan="plan"
|
|
|
+ @view-detail="handleDetail"
|
|
|
+ @choose-task="chooseTask"
|
|
|
+ class="transition-all duration-300 hover:shadow-lg"
|
|
|
+ />
|
|
|
+ <!-- 空状态-->
|
|
|
+ <el-empty v-if="planList.length === 0" description="暂无数据" />
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <!-- 底部右侧分页 -->
|
|
|
+ <template #footer-actions>
|
|
|
+ <el-pagination
|
|
|
+ @size-change="handleSizeChange"
|
|
|
+ @current-change="handleCurrentChange"
|
|
|
+ :current-page="pagination.currentPage"
|
|
|
+ :page-sizes="[10, 20, 50, 100]"
|
|
|
+ :page-size="pagination.pageSize"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :total="pagination.total"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+ </DarkLayout>
|
|
|
+ <!-- 选择方案 -->
|
|
|
+ <!-- 选择方案抽屉 -->
|
|
|
+ <DarkDrawer
|
|
|
+ title="选择方案"
|
|
|
+ :visible.sync="drawerVisible"
|
|
|
+ @confirm="handleConfirm"
|
|
|
+ @cancel="drawerVisible=false"
|
|
|
+ >
|
|
|
+ <div class="drawer-main">
|
|
|
+ <!-- 干扰方案 -->
|
|
|
+ <div class="section-group">
|
|
|
+ <div class="section-header">
|
|
|
+ <h3 class="section-title">干扰方案</h3>
|
|
|
+ <div class="section-divider"></div>
|
|
|
+ </div>
|
|
|
+ <div class="cards-container">
|
|
|
+ <InterferenceCard
|
|
|
+ v-for="plan in interferencePlanData"
|
|
|
+ :key="plan.id"
|
|
|
+ :plan="plan"
|
|
|
+ v-if="interferencePlanData.length > 0"
|
|
|
+ @select="handleSelectInt"
|
|
|
+ @check="handleInterferenceCheck"
|
|
|
+ @view-detail="viewDetailsInt"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 靶标方案 -->
|
|
|
+ <div class="section-group">
|
|
|
+ <div class="section-header">
|
|
|
+ <h3 class="section-title">靶标方案</h3>
|
|
|
+ <div class="section-divider"></div>
|
|
|
+ </div>
|
|
|
+ <div class="cards-container">
|
|
|
+ <TargetCard
|
|
|
+ v-if="planListB.length > 0"
|
|
|
+ v-for="plan in planListB"
|
|
|
+ :key="plan.id"
|
|
|
+ :plan="plan"
|
|
|
+ @select="handleSelectB"
|
|
|
+ @check="handleTargetCheck"
|
|
|
+ @view-detail="viewDetailsB"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 测量方案 -->
|
|
|
+ <div class="section-group">
|
|
|
+ <div class="section-header">
|
|
|
+ <h3 class="section-title">测量方案</h3>
|
|
|
+ <div class="section-divider"></div>
|
|
|
+ </div>
|
|
|
+ <div class="cards-container">
|
|
|
+ <MeasCard
|
|
|
+ v-for="plan in measPlanData"
|
|
|
+ :key="plan.id"
|
|
|
+ :plan="plan"
|
|
|
+ v-if="measPlanData.length > 0"
|
|
|
+ @select="handleSelectC"
|
|
|
+ @check="handleMeasCheck"
|
|
|
+ @view-detail="viewDetailsC"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </div>
|
|
|
+ <div >
|
|
|
+ <el-button @click="drawerVisible = false" type="info">取消</el-button>
|
|
|
+ <el-button @click="handleConfirm">确定</el-button>
|
|
|
+ </div>
|
|
|
+ </DarkDrawer>
|
|
|
+ <!-- 新增:任务详情抽屉 -->
|
|
|
+ <DarkDrawer
|
|
|
+ title="任务详情"
|
|
|
+ :visible.sync="detailDrawerVisible"
|
|
|
+ size="50%"
|
|
|
+ :show-footer="false"
|
|
|
+ >
|
|
|
+ <div class="detail-container">
|
|
|
+ <!-- 详情头部 -->
|
|
|
+ <div class="detail-header">
|
|
|
+ <div class="secret-tag" :style="detailSecretTagStyle">
|
|
|
+ {{ currentDetailPlan.secretLevel }}
|
|
|
+ </div>
|
|
|
+ <h3 class="detail-title">{{ currentDetailPlan.planName }}</h3>
|
|
|
+ <div class="detail-status">
|
|
|
+ <el-tag
|
|
|
+ :type="detailStatusTagType"
|
|
|
+ size="small"
|
|
|
+ effect="dark"
|
|
|
+ >
|
|
|
+ {{ currentDetailPlan.status || '-' }}
|
|
|
+ </el-tag>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 详情内容区 -->
|
|
|
+ <div class="detail-content">
|
|
|
+ <!-- 基本信息卡片 -->
|
|
|
+ <div class="detail-card">
|
|
|
+ <h4 class="card-title">基本信息</h4>
|
|
|
+ <div class="info-grid">
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">任务名称:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.simulationTaskName || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">任务类型:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.taskType || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">开始时间:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.simulationStartTime || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">结束时间:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.simulationEndTime || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">模拟次数:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.simulationCount || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 参与信息卡片 -->
|
|
|
+ <div class="detail-card">
|
|
|
+ <h4 class="card-title">参与信息</h4>
|
|
|
+ <div class="info-grid">
|
|
|
+ <div class="info-item full-width">
|
|
|
+ <span class="detail-label">参试任务:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.simulationParticipantTasks || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- 创建信息卡片 -->
|
|
|
+ <div class="detail-card">
|
|
|
+ <h4 class="card-title">创建信息</h4>
|
|
|
+ <div class="info-grid">
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">创建人:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.username || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ <div class="info-item">
|
|
|
+ <span class="detail-label">创建时间:</span>
|
|
|
+ <span class="detail-value">{{ currentDetailPlan.createTime || '-' }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </DarkDrawer>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script>
|
|
|
+
|
|
|
+import DarkLayout from '@/components/GlobalComponents/DarkLayout.vue'
|
|
|
+import TaskUserCard from '@/components/Components/TaskUserCard.vue'
|
|
|
+import DarkDialog from "@/components/Components/DarkDialog.vue";
|
|
|
+import TargetCard from "./components/TargetCard.vue"
|
|
|
+import MeasCard from "./components/MeasCard.vue"
|
|
|
+import InterferenceCard from "./components/InterferenceCard.vue"
|
|
|
+
|
|
|
+export default {
|
|
|
+ components: {
|
|
|
+ DarkDialog,
|
|
|
+ DarkLayout,
|
|
|
+ TaskUserCard,
|
|
|
+ TargetCard,
|
|
|
+ MeasCard,
|
|
|
+ InterferenceCard,
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ detailDrawerVisible: false,
|
|
|
+ currentDetailPlan: {},
|
|
|
+ role:'ordinary',//角色选择 指挥角色下 不可编辑
|
|
|
+ selectedInterference: null,
|
|
|
+ selectedTarget: null,
|
|
|
+ selectedMeas: null,
|
|
|
+ drawerQueryForm: {
|
|
|
+ planName: '',
|
|
|
+ taskName: '',
|
|
|
+ status: ''
|
|
|
+ },
|
|
|
+ // 用于存储过滤后的方案数据
|
|
|
+ filteredPlansData: [],
|
|
|
+ drawerVisible: false,
|
|
|
+ tableData: [
|
|
|
+ {
|
|
|
+ date: '2023-06-01',
|
|
|
+ name: '张三',
|
|
|
+ address: '北京市海淀区'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ date: '2023-06-02',
|
|
|
+ name: '李四',
|
|
|
+ address: '上海市浦东新区'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ plans: [
|
|
|
+ {
|
|
|
+ id: '1',
|
|
|
+ planName: '新型导弹打击试验-综合布设方案',
|
|
|
+ taskName: '新型导弹打击试验',
|
|
|
+ taskCode: 'TASK-2023-001',
|
|
|
+ startTime: '2023-01-01',
|
|
|
+ endTime: '2023-12-31',
|
|
|
+ secretLevel: '秘密',
|
|
|
+ secretYears: '10年',
|
|
|
+ status: '有效',
|
|
|
+ interferenceSchemeStatus: '已编制',
|
|
|
+ measurementSchemeStatus: '已编制',
|
|
|
+ targetSchemeStatus: '已编制',
|
|
|
+ version: 'V1.0.0'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '2',
|
|
|
+ planName: '电子对抗演练-综合布设方案',
|
|
|
+ taskName: '电子对抗演练',
|
|
|
+ taskCode: 'TASK-2023-002',
|
|
|
+ startTime: '2023-02-01',
|
|
|
+ endTime: '2023-11-30',
|
|
|
+ secretLevel: '机密',
|
|
|
+ secretYears: '15年',
|
|
|
+ status: '待审核',
|
|
|
+ interferenceSchemeStatus: '已审核',
|
|
|
+ measurementSchemeStatus: '已编制',
|
|
|
+ targetSchemeStatus: '编制中',
|
|
|
+ version: 'V1.1.0'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '3',
|
|
|
+ planName: '电子对抗演练-综合布设方案',
|
|
|
+ taskName: '电子对抗演练',
|
|
|
+ taskCode: 'TASK-2023-003',
|
|
|
+ startTime: '2023-03-01',
|
|
|
+ endTime: '2023-10-31',
|
|
|
+ secretLevel: '绝密',
|
|
|
+ secretYears: '20年',
|
|
|
+ status: '草稿',
|
|
|
+ interferenceSchemeStatus: '未编制',
|
|
|
+ measurementSchemeStatus: '已编制',
|
|
|
+ targetSchemeStatus: '未编制',
|
|
|
+ version: 'V0.9.0'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '4',
|
|
|
+ planName: '新型导弹打击试验-综合布设方案',
|
|
|
+ taskName: '新型导弹打击试验',
|
|
|
+ taskCode: 'TASK-2023-003',
|
|
|
+ startTime: '2023-03-01',
|
|
|
+ endTime: '2023-10-31',
|
|
|
+ secretLevel: '绝密',
|
|
|
+ secretYears: '20年',
|
|
|
+ status: '草稿',
|
|
|
+ interferenceSchemeStatus: '未编制',
|
|
|
+ measurementSchemeStatus: '已编制',
|
|
|
+ targetSchemeStatus: '未编制',
|
|
|
+ version: 'V0.9.0'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: '5',
|
|
|
+ planName: '电子对抗演练-综合布设方案',
|
|
|
+ taskName: '电子对抗演练',
|
|
|
+ taskCode: 'TASK-2023-001',
|
|
|
+ startTime: '2023-01-01',
|
|
|
+ endTime: '2023-12-31',
|
|
|
+ secretLevel: '秘密',
|
|
|
+ secretYears: '10年',
|
|
|
+ status: '有效',
|
|
|
+ interferenceSchemeStatus: '已编制',
|
|
|
+ measurementSchemeStatus: '已编制',
|
|
|
+ targetSchemeStatus: '已编制',
|
|
|
+ version: 'V1.0.0'
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ // 导入任务数据数组
|
|
|
+ planList: [
|
|
|
+ {
|
|
|
+ id: "import_001",
|
|
|
+ planName: "2024年度导弹防御系统测试方案",
|
|
|
+ simulationTaskName: "导弹防御系统联合仿真测试",
|
|
|
+ simulationStartTime: "2024-06-15 08:00:00",
|
|
|
+ simulationEndTime: "2024-06-20 18:00:00",
|
|
|
+ simulationCount: "5次",
|
|
|
+ simulationParticipantTasks: "雷达监测、导弹拦截、数据分析",
|
|
|
+ secretLevel: "机密",
|
|
|
+ status: "已确认",
|
|
|
+ username: "张三",
|
|
|
+ createTime: "2024-05-20 14:30:00",
|
|
|
+ taskType: "联合仿真"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: "import_002",
|
|
|
+ planName: "新型雷达系统性能验证方案",
|
|
|
+ simulationTaskName: "相控阵雷达多目标跟踪测试",
|
|
|
+ simulationStartTime: "2024-07-10 09:00:00",
|
|
|
+ simulationEndTime: "2024-07-15 17:00:00",
|
|
|
+ simulationCount: "3次",
|
|
|
+ simulationParticipantTasks: "目标识别、轨迹预测、威胁评估",
|
|
|
+ secretLevel: "秘密",
|
|
|
+ status: "未确认",
|
|
|
+ username: "李四",
|
|
|
+ createTime: "2024-06-01 10:15:00",
|
|
|
+ taskType: "性能验证"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: "import_003",
|
|
|
+ planName: "电子对抗系统实战演练方案",
|
|
|
+ simulationTaskName: "复杂电磁环境下电子对抗演练",
|
|
|
+ simulationStartTime: "2024-08-05 08:30:00",
|
|
|
+ simulationEndTime: "2024-08-10 19:00:00",
|
|
|
+ simulationCount: "8次",
|
|
|
+ simulationParticipantTasks: "电子干扰、通信保障、频谱监测",
|
|
|
+ secretLevel: "绝密",
|
|
|
+ status: "草稿",
|
|
|
+ username: "王五",
|
|
|
+ createTime: "2024-07-15 16:45:00",
|
|
|
+ taskType: "实战演练"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ dialogVisible: false,
|
|
|
+ currentPlan: {}, // 当前选中的任务数据
|
|
|
+ queryForm: {
|
|
|
+ name: '',
|
|
|
+ taskCode: ''
|
|
|
+ },
|
|
|
+ planListB: [
|
|
|
+ {
|
|
|
+ id: "target_001",
|
|
|
+ planName: "2024年度东海靶场实弹射击训练方案",
|
|
|
+ taskName: "东海舰队实弹射击训练任务",
|
|
|
+ taskCode: "DH-2024-TS-001",
|
|
|
+ startTime: "2024-06-15 08:00:00",
|
|
|
+ endTime: "2024-06-20 18:00:00",
|
|
|
+ compileStatus: "已编制",
|
|
|
+ secretLevel: "机密",
|
|
|
+ secretYears: "20年",
|
|
|
+ status: "有效"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: "target_002",
|
|
|
+ planName: "南海区域反舰导弹靶标测试方案",
|
|
|
+ taskName: "南海舰队反舰导弹测试任务",
|
|
|
+ taskCode: "NH-2024-ASM-002",
|
|
|
+ startTime: "2024-07-10 09:00:00",
|
|
|
+ endTime: "2024-07-15 17:00:00",
|
|
|
+ compileStatus: "编制中",
|
|
|
+ secretLevel: "秘密",
|
|
|
+ secretYears: "10年",
|
|
|
+ status: "待审核"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ measPlanData: [
|
|
|
+ {
|
|
|
+ id: "meas_001",
|
|
|
+ planName: "2024年度导弹试验测量方案",
|
|
|
+ taskName: "东风系列导弹测试任务",
|
|
|
+ taskCode: "DF-2024-MS-001",
|
|
|
+ startTime: "2024-06-15 08:00:00",
|
|
|
+ endTime: "2024-06-20 18:00:00",
|
|
|
+ compileStatus: "已编制",
|
|
|
+ secretLevel: "机密",
|
|
|
+ secretYears: "20年",
|
|
|
+ status: "有效"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: "meas_002",
|
|
|
+ planName: "新型雷达系统测量验证方案",
|
|
|
+ taskName: "相控阵雷达性能验证任务",
|
|
|
+ taskCode: "PA-2024-RD-002",
|
|
|
+ startTime: "2024-07-10 09:00:00",
|
|
|
+ endTime: "2024-07-15 17:00:00",
|
|
|
+ compileStatus: "编制中",
|
|
|
+ secretLevel: "秘密",
|
|
|
+ secretYears: "10年",
|
|
|
+ status: "待审核"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ interferencePlanData: [
|
|
|
+ {
|
|
|
+ id: 'plan-001',
|
|
|
+ planName: '东海靶场2023年度靶标保障方案',
|
|
|
+ taskName: '新型导弹打击试验',
|
|
|
+ taskCode: 'DH-2023-001',
|
|
|
+ startTime: '2023-06-15',
|
|
|
+ endTime: '2023-06-20',
|
|
|
+ compileStatus: '已编制',
|
|
|
+ secretLevel: '秘密',
|
|
|
+ secretYears: '10年',
|
|
|
+ status: '有效'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ id: 'plan-002',
|
|
|
+ planName: '南海靶场电子对抗方案',
|
|
|
+ taskName: '电子对抗演练',
|
|
|
+ taskCode: 'NH-2023-002',
|
|
|
+ startTime: '2023-07-10',
|
|
|
+ endTime: '2023-07-15',
|
|
|
+ compileStatus: '编制中',
|
|
|
+ secretLevel: '机密',
|
|
|
+ secretYears: '5年',
|
|
|
+ status: '待审核'
|
|
|
+ },
|
|
|
+ ],
|
|
|
+ pagination: {
|
|
|
+ currentPage: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ total: 0
|
|
|
+ },
|
|
|
+ showAdvancedSearch: false
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ detailSecretTagStyle() {
|
|
|
+ const colors = {
|
|
|
+ '绝密': '#c45656',
|
|
|
+ '机密': '#b88230',
|
|
|
+ '秘密': '#3475b5',
|
|
|
+ };
|
|
|
+ return {
|
|
|
+ backgroundColor: colors[this.currentDetailPlan.secretLevel] || '#6b7280',
|
|
|
+ };
|
|
|
+ },
|
|
|
+ detailStatusTagType() {
|
|
|
+ const statusMap = {
|
|
|
+ '已确认': 'success',
|
|
|
+ '未确认': 'warning',
|
|
|
+ '草稿': 'info',
|
|
|
+ '有效': 'success',
|
|
|
+ '待审核': 'warning',
|
|
|
+ '已过期': 'danger'
|
|
|
+ };
|
|
|
+ return statusMap[this.currentDetailPlan.status] || 'default';
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ handleDetail(plan) {
|
|
|
+ this.currentDetailPlan = { ...plan };
|
|
|
+ this.detailDrawerVisible = true;
|
|
|
+ },
|
|
|
+ // 干扰方案选择处理
|
|
|
+ handleInterferenceCheck(data) {
|
|
|
+ if (data.checked) {
|
|
|
+ // 选中时,取消同类型其他方案的选中状态
|
|
|
+ this.interferencePlanData = this.interferencePlanData.map(plan => ({
|
|
|
+ ...plan,
|
|
|
+ isSelected: plan.id === data.plan.id
|
|
|
+ }));
|
|
|
+ this.selectedInterference = data.plan;
|
|
|
+ } else {
|
|
|
+ // 取消选中
|
|
|
+ this.selectedInterference = null;
|
|
|
+ const index = this.interferencePlanData.findIndex(plan => plan.id === data.plan.id);
|
|
|
+ if (index !== -1) {
|
|
|
+ this.interferencePlanData[index].isSelected = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 靶标方案选择处理
|
|
|
+ handleTargetCheck(data) {
|
|
|
+ if (data.checked) {
|
|
|
+ this.planListB = this.planListB.map(plan => ({
|
|
|
+ ...plan,
|
|
|
+ isSelected: plan.id === data.plan.id
|
|
|
+ }));
|
|
|
+ this.selectedTarget = data.plan;
|
|
|
+ } else {
|
|
|
+ this.selectedTarget = null;
|
|
|
+ const index = this.planListB.findIndex(plan => plan.id === data.plan.id);
|
|
|
+ if (index !== -1) {
|
|
|
+ this.planListB[index].isSelected = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 测量方案选择处理
|
|
|
+ handleMeasCheck(data) {
|
|
|
+ if (data.checked) {
|
|
|
+ this.measPlanData = this.measPlanData.map(plan => ({
|
|
|
+ ...plan,
|
|
|
+ isSelected: plan.id === data.plan.id
|
|
|
+ }));
|
|
|
+ this.selectedMeas = data.plan;
|
|
|
+ } else {
|
|
|
+ this.selectedMeas = null;
|
|
|
+ const index = this.measPlanData.findIndex(plan => plan.id === data.plan.id);
|
|
|
+ if (index !== -1) {
|
|
|
+ this.measPlanData[index].isSelected = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ // 确定按钮处理
|
|
|
+ handleConfirm() {
|
|
|
+ // 验证是否三个方案都已选择
|
|
|
+ if (!this.selectedInterference || !this.selectedTarget || !this.selectedMeas) {
|
|
|
+ this.$message.warning('请分别选择干扰方案、靶标方案和测量方案');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 跳转页面并传递参数
|
|
|
+ this.$router.push({
|
|
|
+ path: '/testBuild/orderEdit', // 跳转到configForPlan页面
|
|
|
+ query: {
|
|
|
+ interferenceName: this.selectedInterference.planName,
|
|
|
+ targetName: this.selectedTarget.planName,
|
|
|
+ measName: this.selectedMeas.planName,
|
|
|
+ role:this.role
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ this.drawerVisible = false;
|
|
|
+ },
|
|
|
+ handleSelectInt(){
|
|
|
+
|
|
|
+ },
|
|
|
+ handleEditInt(){
|
|
|
+ console.log("选择任务 干扰方案")
|
|
|
+ this.$router.push({ path: '/planningSchem/Interference',query: { planType: '干扰方案' } })
|
|
|
+ },
|
|
|
+ viewDetailsInt(){
|
|
|
+
|
|
|
+ },
|
|
|
+ handleSelectB(){
|
|
|
+
|
|
|
+ },
|
|
|
+ handleEditB(){
|
|
|
+ console.log("选择任务 靶标方案")
|
|
|
+ this.$router.push({ path: '/taskEdit/TargerEdit',query: { planType: '靶标方案' } })
|
|
|
+ },
|
|
|
+ viewDetailsB(){
|
|
|
+
|
|
|
+ },
|
|
|
+ handleSelectC(){
|
|
|
+
|
|
|
+ },
|
|
|
+ handleEditC(){
|
|
|
+ console.log("选择任务 测量方案")
|
|
|
+ this.$router.push({ path: '/taskEdit/MeasEdit',query: { planType: '测量方案' } })
|
|
|
+ },
|
|
|
+ viewDetailsC(){
|
|
|
+
|
|
|
+ },
|
|
|
+ // 根据方案类型过滤数据
|
|
|
+ filteredPlans(type) {
|
|
|
+ // 根据实际数据结构调整过滤逻辑
|
|
|
+ const statusField = {
|
|
|
+ interference: 'interferenceSchemeStatus',
|
|
|
+ target: 'targetSchemeStatus',
|
|
|
+ measurement: 'measurementSchemeStatus'
|
|
|
+ }[type];
|
|
|
+
|
|
|
+ // 返回状态为"已编制"的方案,可根据实际需求调整过滤条件
|
|
|
+ return this.plans.filter(plan =>
|
|
|
+ plan[statusField] && plan[statusField] !== '未编制'
|
|
|
+ );
|
|
|
+ },
|
|
|
+ handleViewDetail() {
|
|
|
+ this.$router.push({ path: '/importTask/configForPlan' })
|
|
|
+ },
|
|
|
+ chooseTask(plan) {
|
|
|
+ console.log('任务已经选择,选择方案:', plan)
|
|
|
+ this.currentPlan = plan
|
|
|
+ this.drawerVisible = true
|
|
|
+ },
|
|
|
+ // 处理编辑事件
|
|
|
+ handleEdit(plan) {
|
|
|
+ console.log('编辑计划:', plan)
|
|
|
+ this.$router.push({ path: ''})
|
|
|
+ },
|
|
|
+ handleQuery() {
|
|
|
+ // 查询逻辑
|
|
|
+ },
|
|
|
+ //创建任务
|
|
|
+ addTask(){
|
|
|
+
|
|
|
+ },
|
|
|
+ resetQuery() {
|
|
|
+ this.queryForm = {
|
|
|
+ name: '',
|
|
|
+ taskCode: ''
|
|
|
+ }
|
|
|
+ this.handleQuery()
|
|
|
+ },
|
|
|
+ handleSizeChange(val) {
|
|
|
+ this.pagination.pageSize = val
|
|
|
+ this.fetchData()
|
|
|
+ },
|
|
|
+ handleCurrentChange(val) {
|
|
|
+ this.pagination.currentPage = val
|
|
|
+ this.fetchData()
|
|
|
+ },
|
|
|
+ fetchData() {
|
|
|
+ // 获取数据逻辑
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<style scoped>
|
|
|
+.drawer-main {
|
|
|
+ padding: 20px;
|
|
|
+ max-height: 70vh;
|
|
|
+ overflow-y: auto;
|
|
|
+}
|
|
|
+
|
|
|
+/* 保持与主内容区相同的样式 */
|
|
|
+.section-group {
|
|
|
+ margin-bottom: 30px;
|
|
|
+}
|
|
|
+
|
|
|
+.section-header {
|
|
|
+ margin-bottom: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.section-title {
|
|
|
+ color: #e0e6ed;
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ margin-bottom: 8px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.section-title::before {
|
|
|
+ content: '';
|
|
|
+ display: inline-block;
|
|
|
+ width: 4px;
|
|
|
+ height: 18px;
|
|
|
+ background-color: #409EFF;
|
|
|
+ border-radius: 2px;
|
|
|
+ margin-right: 8px;
|
|
|
+}
|
|
|
+
|
|
|
+.section-divider {
|
|
|
+ height: 1px;
|
|
|
+ background: linear-gradient(90deg, rgba(64, 158, 255, 0.5), rgba(64, 158, 255, 0));
|
|
|
+}
|
|
|
+
|
|
|
+.cards-container {
|
|
|
+ padding: 15px 0;
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
|
|
|
+ gap: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 抽屉滚动条样式优化 */
|
|
|
+.drawer-main::-webkit-scrollbar {
|
|
|
+ width: 6px;
|
|
|
+}
|
|
|
+
|
|
|
+.drawer-main::-webkit-scrollbar-track {
|
|
|
+ background: #2c3e50;
|
|
|
+}
|
|
|
+
|
|
|
+.drawer-main::-webkit-scrollbar-thumb {
|
|
|
+ background: #4a6572;
|
|
|
+ border-radius: 3px;
|
|
|
+}
|
|
|
+
|
|
|
+/* 任务详情抽屉样式优化 */
|
|
|
+.detail-container {
|
|
|
+ padding: 20px;
|
|
|
+ height: 100%;
|
|
|
+ box-sizing: border-box;
|
|
|
+ overflow-y: auto;
|
|
|
+ max-height: 85vh;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-header {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between;
|
|
|
+ align-items: center;
|
|
|
+ margin-bottom: 25px;
|
|
|
+ padding-bottom: 15px;
|
|
|
+ border-bottom: 1px solid #374151;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-title {
|
|
|
+ font-size: 22px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #e5e7eb;
|
|
|
+ margin: 0;
|
|
|
+ flex-grow: 1;
|
|
|
+ padding: 0 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.secret-tag {
|
|
|
+ padding: 3px 10px;
|
|
|
+ border-radius: 4px;
|
|
|
+ color: white;
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 500;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-status {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-content {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 20px;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-card {
|
|
|
+ border-radius: 8px;
|
|
|
+ padding: 20px;
|
|
|
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.3);
|
|
|
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-card:hover {
|
|
|
+ transform: translateY(-2px);
|
|
|
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.4);
|
|
|
+}
|
|
|
+
|
|
|
+.card-title {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: #93c5fd;
|
|
|
+ margin-top: 0;
|
|
|
+ margin-bottom: 15px;
|
|
|
+ padding-bottom: 8px;
|
|
|
+ border-bottom: 1px solid #374151;
|
|
|
+}
|
|
|
+
|
|
|
+.info-grid {
|
|
|
+ display: grid;
|
|
|
+ grid-template-columns: repeat(2, 1fr);
|
|
|
+ gap: 15px;
|
|
|
+}
|
|
|
+
|
|
|
+.info-item {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+}
|
|
|
+
|
|
|
+.full-width {
|
|
|
+ grid-column: 1 / -1;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-label {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #9ca3af;
|
|
|
+ margin-bottom: 5px;
|
|
|
+}
|
|
|
+
|
|
|
+.detail-value {
|
|
|
+ font-size: 15px;
|
|
|
+ color: #e5e7eb;
|
|
|
+ word-break: break-word;
|
|
|
+}
|
|
|
+
|
|
|
+/* 响应式调整 */
|
|
|
+@media (max-width: 768px) {
|
|
|
+ .info-grid {
|
|
|
+ grid-template-columns: 1fr;
|
|
|
+ }
|
|
|
+
|
|
|
+ .full-width {
|
|
|
+ grid-column: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .detail-header {
|
|
|
+ flex-direction: column;
|
|
|
+ align-items: flex-start;
|
|
|
+ gap: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .detail-status {
|
|
|
+ align-self: flex-start;
|
|
|
+ }
|
|
|
+}
|
|
|
+</style>
|