Explorar el Código

方案筹划修改与全局message样式修改

zhaoen hace 4 meses
padre
commit
41113ecc75

+ 20 - 0
src/api/threeMork.js

@@ -1,5 +1,17 @@
 import request from "@/utils/request";
 
+// 上传三维模型接口
+export function uploadModel(data) {
+  return request({
+    url: "/api/v1/three-d-model/upload",
+    method: "post",
+    headers: {
+      "Content-Type": "multipart/form-data",
+    },
+    data,
+  });
+}
+
 // 分页列表
 export function getDataList(param) {
   return request({
@@ -35,6 +47,14 @@ export function delModel(id) {
   });
 }
 
+// 根据id获取模型
+export function getDetailById(id) {
+  return request({
+    url: `/api/v1/three-d-model/get/${id}`,
+    method: "get",
+  });
+}
+
 // 查询所有模型类型
 export function getAllModelType() {
   return request({

+ 7 - 8
src/components/Components/TaskUserCard.vue

@@ -12,7 +12,7 @@
           :disabled="!isPlanNameOverflow"
         >
           <h3 ref="planNameRef" class="plan-name" style="color: #e0e6ed">
-            {{ `${plan.taskName}-靶标保障方案`  }}
+            {{ `${plan.taskName}-靶标保障方案` }}
           </h3>
         </el-tooltip>
         <el-button
@@ -46,9 +46,7 @@
             :disabled="!isTaskTypeOverflow"
           >
             <span ref="taskNameRef" class="info-value dark-value text-ellipsis">
-              {{
-                this.$getDictNameByValue("task_type", plan.taskType + "") || "-"
-              }}
+              {{ $getDictNameByValue("task_type", plan.taskType + "") || "-" }}
             </span>
           </el-tooltip>
         </div>
@@ -82,7 +80,8 @@
         <div class="info-row">
           <span class="info-label dark-label">处理状态:</span>
           <el-tag :type="compileStatusTagType" effect="dark" class="info-value">
-            {{ plan.taskStatus }}
+            <!--{{ plan.taskStatus }}-->
+            {{ $getDictNameByValue("sys_childTask_status", plan.taskStatus) }}
           </el-tag>
         </div>
 
@@ -125,7 +124,7 @@
         required: true,
         default: () => ({
           id: "",
-            testTime: "",
+          testTime: "",
           planName: "",
           taskType: "",
           taskName: "",
@@ -189,7 +188,7 @@
     },
     mounted() {
       this.checkOverflows();
-        console.log(this.plan,"333")
+      console.log(this.plan, "333");
     },
     updated() {
       this.checkOverflows();
@@ -243,7 +242,7 @@
         })
           .then(() => {
             // 用户点击“确定”
-            this.$emit("delete",this.plan)
+            this.$emit("delete", this.plan);
           })
           .catch(() => {
             // 用户点击“取消”或关闭弹窗

+ 38 - 25
src/components/GlobalComponents/OverallCard.vue

@@ -59,24 +59,24 @@
       <div class="info-row">
         <span class="info-label dark-label">打击维度:</span>
         <el-tooltip
-            :content="plan.fightAway"
-            placement="top"
-            :disabled="!isFightAwayOverflow"
+          :content="plan.fightAway"
+          placement="top"
+          :disabled="!isFightAwayOverflow"
         >
-            <span ref="fightAway" class="dark-value text-ellipsis">
-              {{ plan.fightAway || "对陆" }}
-            </span>
+          <span ref="fightAway" class="dark-value text-ellipsis">
+            {{ plan.fightAway || "对陆" }}
+          </span>
         </el-tooltip>
       </div>
       <div class="plan-additional-info">
         <div class="info-row">
           <span class="info-label dark-label">干扰方案:</span>
           <el-tag
-              :type="getSchemeStatusType2(plan.interferenceSchemeStatus)"
-              size="small"
-              effect="dark"
-              class="cursor-pointer"
-              @click="viewIntePlan(plan.interferenceSchemeStatus)"
+            :type="getSchemeStatusType2(plan.interferenceSchemeStatus)"
+            size="small"
+            effect="dark"
+            class="cursor-pointer"
+            @click="viewIntePlan(plan.interferenceSchemeStatus)"
           >
             {{ plan.interferenceSchemeStatus || "未导入" }}
           </el-tag>
@@ -84,11 +84,11 @@
         <div class="info-row">
           <span class="info-label dark-label">测量方案:</span>
           <el-tag
-              :type="getSchemeStatusType(plan.measurementSchemeStatus)"
-              size="small"
-              effect="dark"
-              class="cursor-pointer"
-              @click="viewMeasPlan(plan.measurementSchemeStatus)"
+            :type="getSchemeStatusType(plan.measurementSchemeStatus)"
+            size="small"
+            effect="dark"
+            class="cursor-pointer"
+            @click="viewMeasPlan(plan.measurementSchemeStatus)"
           >
             {{ plan.measurementSchemeStatus || "未编制" }}
           </el-tag>
@@ -96,11 +96,11 @@
         <div class="info-row">
           <span class="info-label dark-label">靶标方案:</span>
           <el-tag
-              :type="getSchemeStatusType2(plan.targetSchemeStatus)"
-              size="small"
-              effect="dark"
-              class="cursor-pointer"
-              @click="viewTargetPlan(plan.targetSchemeStatus)"
+            :type="getSchemeStatusType2(plan.targetSchemeStatus)"
+            size="small"
+            effect="dark"
+            class="cursor-pointer"
+            @click="viewTargetPlan(plan.targetSchemeStatus)"
           >
             {{ plan.targetSchemeStatus || "未导入" }}
           </el-tag>
@@ -125,7 +125,12 @@
         导出
       </el-button>
 
-      <el-button icon="el-icon-edit" class="blue-btn" @click="viewDetail">
+      <el-button
+        v-if="isAllImported"
+        icon="el-icon-edit"
+        class="blue-btn"
+        @click="viewDetail"
+      >
         编制靶标保障方案
       </el-button>
     </div>
@@ -167,6 +172,14 @@
       };
     },
     computed: {
+      isAllImported() {
+        console.log(this.plan);
+        return (
+          this.plan.interferenceSchemeStatus === "已导入" &&
+          this.plan.measurementSchemeStatus === "已编制" &&
+          this.plan.targetSchemeStatus === "已导入"
+        );
+      },
       cardClass() {
         return {
           "top-secret": this.plan.secretLevel === "绝密",
@@ -245,7 +258,7 @@
           this.$refs.versionRef
         );
         this.isFightAwayOverflow = this.checkElementOverflow(
-            this.$refs.fightAway
+          this.$refs.fightAway
         );
       },
       checkElementOverflow(element) {
@@ -260,8 +273,8 @@
       viewDetail() {
         this.$emit("view-detail", this.plan);
       },
-      viewDetailhisty(){
-        this.$emit("view-detail-histy",this.plan)
+      viewDetailhisty() {
+        this.$emit("view-detail-histy", this.plan);
       },
       exportPlan() {
         this.$emit("export-plan", this.plan);

+ 1 - 0
src/plugins/element.js

@@ -2,6 +2,7 @@ import Vue from "vue";
 import ElementUI from "element-ui";
 import "element-ui/lib/theme-chalk/display.css";
 
+// import 'element-ui/lib/theme-chalk/index.css'
 import "@/styles/element-variables.scss";
 
 Vue.use(ElementUI, {

+ 12 - 12
src/styles/element-variables.scss

@@ -43,22 +43,22 @@ $--color-primary-light-8: mix($--color-white, $--color-primary, 80%); // 主色8
 $--color-primary-light-9: mix($--color-white, $--color-primary, 90%); // 主色90%浅色:主色+90%白色混合
 
 /// 功能色(军事风格低饱和色)
-$--color-success: #128277;                    // 成功状态色:深绿色,用于表示操作成功
-$--color-warning: #c45c34;                    // 警告状态色:深橙色,用于表示警告信息
-$--color-danger: rgb(82,34,24);               // 危险状态色:用户指定深红色,用于表示错误或危险
-$--color-info: rgb(4, 53, 24);                // 信息状态色:用户指定深青色,用于表示提示信息
+$--color-success: #67C23A;                    // 成功状态色:深绿色,用于表示操作成功
+$--color-warning: #E6A23A;                    // 警告状态色:深橙色,用于表示警告信息
+$--color-danger: #F56C6C;               // 危险状态色:用户指定深红色,用于表示错误或危险
+$--color-info: #909399;                // 信息状态色:用户指定深青色,用于表示提示信息
 
 /// 功能色浅色系列 - 用于背景高亮
-$--color-success-light: rgba(18, 130, 119, 0.15); // 成功状态浅色背景:15%透明度的成功色
-$--color-warning-light: rgba(196, 92, 52, 0.15); // 警告状态浅色背景:15%透明度的警告色
-$--color-danger-light: rgba(82, 34, 24, 0.15);   // 危险状态浅色背景:15%透明度的危险色
-$--color-info-light: rgba(4, 53, 24, 0.15);      // 信息状态浅色背景:15%透明度的信息色
+$--color-success-light: rgba(18, 130, 119, 0.9); // 成功状态浅色背景:15%透明度的成功色
+$--color-warning-light: rgba(196, 92, 52, 0.9); // 警告状态浅色背景:15%透明度的警告色
+$--color-danger-light: rgba(82, 34, 24, 0.9);   // 危险状态浅色背景:15%透明度的危险色
+$--color-info-light: rgba(4, 53, 24, 0.9);      // 信息状态浅色背景:15%透明度的信息色
 
 /// 功能色更浅系列 - 用于边框和分隔
-$--color-success-lighter: rgba(18, 130, 119, 0.08); // 成功状态更浅背景:8%透明度的成功色
-$--color-warning-lighter: rgba(196, 92, 52, 0.08); // 警告状态更浅背景:8%透明度的警告色
-$--color-danger-lighter: rgba(82, 34, 24, 0.08);   // 危险状态更浅背景:8%透明度的危险色
-$--color-info-lighter: rgba(4, 53, 24, 0.08);      // 信息状态更浅背景:8%透明度的信息色
+$--color-success-lighter: rgba(18, 130, 119, 0.9); // 成功状态更浅背景:8%透明度的成功色
+$--color-warning-lighter: rgba(196, 92, 52, 0.9); // 警告状态更浅背景:8%透明度的警告色
+$--color-danger-lighter: rgba(82, 34, 24, 0.9);   // 危险状态更浅背景:8%透明度的危险色
+$--color-info-lighter: rgba(4, 53, 24, 0.9);      // 信息状态更浅背景:8%透明度的信息色
 
 /// 字体色系统(深色背景上的高对比度文本)
 $--color-text-primary: #e0e6ed;               // 主要文本色:浅灰蓝色,用于重要文本

+ 14 - 78
src/views/dataManagement/threeModelManagement/index.vue

@@ -63,8 +63,8 @@
         <!--<el-table-column prop="secretLevel" label="密级" width="80" align="center"/>-->
         <!--<el-table-column prop="modelCategory" label="文件大小" width="100" align="center"/>-->
         <!--<el-table-column prop="uploader" label="上传人" width="100" align="center"/>-->
-        <el-table-column prop="createBy" label="创建人" min-width="180" align="center" sortable/>
-        <el-table-column prop="createTime" label="创建时间" min-width="180" align="center" sortable/>
+        <el-table-column prop="createBy" label="创建人" width="160" align="center" sortable/>
+        <el-table-column prop="createTime" label="创建时间" width="220" align="center" sortable/>
         <el-table-column label="操作" fixed="right" align="center" width="220">
           <template slot-scope="{ row }">
             <div class="action-bar">
@@ -160,7 +160,7 @@
             <el-form-item label="模型文件" prop="modelFilePath">
               <el-upload
                 ref="uploader"
-                :auto-upload="false"
+                :action="uploadUrl"
                 :limit="1"
                 :show-file-list="true"
                 :on-change="onFileChange"
@@ -216,12 +216,14 @@
 </template>
 
 <script>
-import {getDataList, addModel, updateModel, delModel, getAllModelType} from '@/api/threeMork.js'
+import netWork from '@/config/net.config'
+import {getDataList, addModel, updateModel, delModel, getAllModelType, getDetailById} from '@/api/threeMork.js'
 
 export default {
   name: 'ThreeModelManagement',
   data() {
     return {
+      uploadUrl: '',
       addOrUpdateTitle: '新增',
       // 查询
       queryForm: {modelName: '', modelTypeId: ''},
@@ -265,9 +267,9 @@ export default {
     }
   },
   created() {
-    // this.initMock()
     this.getAll()
     this.handleQuery()
+    this.uploadUrl = netWork.baseURL
   },
   methods: {
     // 获取所有类型
@@ -279,30 +281,6 @@ export default {
         this.allTypeList = res.data || []
       })
     },
-    /* ====== 数据Mock ====== */
-    initMock() {
-      const types = {building: '建筑', equipment: '装备', vehicle: '载具'}
-      const states = ['draft', 'published']
-      const list = []
-      for (let i = 1; i <= 50; i++) {
-        const tKeys = Object.keys(types)
-        const type = tKeys[i % tKeys.length]
-        list.push({
-          code: `M-${1000 + i}`,
-          name: `${types[type]}模型-${i}`,
-          type,
-          typeLabel: types[type],
-          modelCategory: states[i % 2],
-          version: `V2.${i % 5 + 1}.0`,
-          secretLevel: ['秘密', '机密', '绝密'][i % 3],
-          sizeLabel: `${(Math.random() * 150 + 20).toFixed(1)} MB`,
-          uploader: ['张三', '李四', '系统'][i % 3],
-          createTime: `2023-12-${String(i % 28 + 1).padStart(2, '0')} 13:30:20`,
-          previewUrl: '',
-        })
-      }
-      this.allData = list
-    },
 
     /* ====== 查询&分页 ====== */
     handleQuery() {
@@ -320,14 +298,6 @@ export default {
         console.log(res)
       }).catch(() => {
       })
-      // let list = this.allData.slice()
-      // const { modelName, modelType, modelCategory } = this.queryForm
-      // if (modelName) list = list.filter(r => r.name.includes(modelName) || r.code.includes(modelName))
-      // if (modelType) list = list.filter(r => r.type === modelType)
-      // if (modelCategory) list = list.filter(r => r.modelCategory === modelCategory)
-      // this.pagination.total = list.length
-      // const start = (this.pagination.currentPage - 1) * this.pagination.pageSize
-      // this.tableData = list.slice(start, start + this.pagination.pageSize)
     },
     resetQuery() {
       this.queryForm = {modelName: '', modelTypeId: ''}
@@ -353,7 +323,11 @@ export default {
       this.previewVisible = true
     },
     handleEdit(row) {
+      // getDetailById(row.id).then(res => {
+      //   console.log(res)
+      // })
       this.addForm = {...row}
+      this.addForm.createBy = row.updateBy || '1'
       this.addOrUpdateTitle = '编辑'
       this.addVisible = true
     },
@@ -456,41 +430,8 @@ export default {
             }
           })
         })
-        // const typeMap = {building: '建筑', equipment: '装备', vehicle: '载具'}
-        // const nextCode = this.genNextCode()
-        // const record = {
-        //   code: nextCode,
-        //   name: this.addForm.modelName,
-        //   type: this.addForm.modelType,
-        //   typeLabel: typeMap[this.addForm.modelType] || this.addForm.modelType,
-        //   modelCategory: 'draft',
-        //   version: 'V1.0.0',
-        //   secretLevel: '秘密',
-        //   sizeLabel: this.addForm.modelSize ? this.formatSize(this.addForm.modelSize) : '--',
-        //   uploader: '系统',
-        //   createTime: this.nowStr(),
-        //   previewUrl: '',
-        //   _raw: {...this.addForm} // 保留原始字段,便于后端打通
-        // }
-        // this.allData.unshift(record)
-        // this.$message.success('上传成功(已加入草稿)')
-        // this.pagination.currentPage = 1
-        // this.addVisible = false
-        // this.handleQuery()
       })
     },
-    genNextCode() {
-      const maxNum = this.allData.reduce((m, r) => {
-        const n = Number((r.code || '').replace(/^\D+/, '')) || 0
-        return Math.max(m, n)
-      }, 1000)
-      return `M-${maxNum + 1}`
-    },
-    nowStr() {
-      const d = new Date()
-      const pad = n => String(n).padStart(2, '0')
-      return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
-    },
   },
 }
 </script>
@@ -506,7 +447,7 @@ export default {
 }
 .dark-dialog {
   .el-dialog {
-    background: var(--dark-dialog-bg, #2d3a4b);
+    background: #11285e;
     border: 1px solid #425163;
     border-radius: 4px;
 
@@ -595,19 +536,14 @@ export default {
   background: rgba(15, 31, 56, 0.86) !important;
 }
 
-.three-model-container .el-table td,
-.three-model-container .el-table th.is-leaf {
-  background: rgba(15, 31, 56, 0.86) !important;
-  border-color: rgba(255, 255, 255, 0.08) !important;
-  color: #e6efff;
-}
 
 .three-model-container .el-table td {
   color: #ffffff !important;
+  background:  rgba(1, 25, 97) !important;
 }
 
 .three-model-container .el-table th {
-  background: rgba(30, 55, 95, 0.85) !important;
+  background: rgba(19, 59, 131) !important;
   color: #ffffff !important;
 }
 

+ 6 - 10
src/views/dataManagement/threeModelTypeManagement/index.vue

@@ -79,8 +79,8 @@
             <el-tag type="danger" v-else>否</el-tag>
           </template>
         </el-table-column>
-        <el-table-column prop="createBy" label="创建人" width="120" align="center"/>
-        <el-table-column prop="createTime" label="创建时间" align="center" sortable/>
+        <el-table-column prop="createBy" label="创建人" width="160" align="center"/>
+        <el-table-column prop="createTime" label="创建时间" width="220" align="center" sortable/>
         <el-table-column label="操作" fixed="right" align="center" width="220">
           <template slot-scope="{ row }">
             <div class="action-bar">
@@ -328,6 +328,7 @@ export default {
     },
     handleView(row) {
       this.currentRow = {...row}
+      this.addForm.createBy = row.updateBy || '1'
       this.detailVisible = true
     },
     handleEdit(row) {
@@ -454,7 +455,7 @@ export default {
 }
 .dark-dialog {
   .el-dialog {
-    background: var(--dark-dialog-bg, #2d3a4b);
+    background: #11285e;
     border: 1px solid #425163;
     border-radius: 4px;
 
@@ -543,19 +544,14 @@ export default {
   background: rgba(15, 31, 56, 0.86) !important;
 }
 
-.three-model-container .el-table td,
-.three-model-container .el-table th.is-leaf {
-  background: rgba(15, 31, 56, 0.86) !important;
-  border-color: rgba(255, 255, 255, 0.08) !important;
-  color: #e6efff;
-}
 
 .three-model-container .el-table td {
   color: #ffffff !important;
+  background:  rgba(1, 25, 97) !important;
 }
 
 .three-model-container .el-table th {
-  background: rgba(30, 55, 95, 0.85) !important;
+  background: rgba(19, 59, 131) !important;
   color: #ffffff !important;
 }
 

+ 15 - 17
src/views/equipment/equipment.vue

@@ -57,8 +57,8 @@
             <span v-else>-</span>
           </template>
         </el-table-column>
-        <el-table-column prop="createTime" label="创建时间" align="center" sortable/>
-        <el-table-column prop="createBy" label="创建人" align="center" sortable/>
+        <el-table-column prop="createBy" label="创建人" align="center" width="220" sortable/>
+        <el-table-column prop="createTime" label="创建时间" align="center" width="180" sortable/>
         <el-table-column label="操作" fixed="right" align="center" width="220">
           <template slot-scope="{ row }">
             <div class="action-bar">
@@ -118,13 +118,13 @@
 
           <el-col :span="24">
             <el-form-item label="装备名称" prop="zbName">
-              <el-input v-model="addForm.zbName" placeholder="请输入装备名称" />
+              <el-input v-model="addForm.zbName" :maxlength="200" show-word-limit placeholder="请输入装备名称" />
             </el-form-item>
           </el-col>
 
           <el-col :span="24">
             <el-form-item label="装备编号" prop="zbCode">
-              <el-input v-model="addForm.zbCode" placeholder="请输入装备编号" />
+              <el-input v-model="addForm.zbCode" :maxlength="100" show-word-limit placeholder="请输入装备编号" />
             </el-form-item>
           </el-col>
 
@@ -132,6 +132,7 @@
             <el-form-item label="IP地址" prop="ipAddress">
               <el-input
                 v-model.trim="addForm.ipAddress"
+                :maxlength="50" show-word-limit
                 placeholder="请输入IP地址"
               />
             </el-form-item>
@@ -140,6 +141,7 @@
             <el-form-item label="端口号" prop="port">
               <el-input
                 v-model.trim="addForm.port"
+                :maxlength="50" show-word-limit
                 placeholder="请输入端口号"
               />
             </el-form-item>
@@ -298,11 +300,12 @@ export default {
       this.selectedRows = val
     },
     handleEdit(row) {
-      this.addForm = {...row}
-      // this.addForm.status = '0'
-      // getEquDetails(row.id).then(res => {
-      //   console.log(res)
-      // })
+      getEquDetails(row.id).then(res => {
+        if(res.code !== 0) {
+          return
+        }
+        this.addForm = { ...res.data }
+      })
       this.addOrUpdateTitle = '编辑'
       this.addVisible = true
     },
@@ -384,7 +387,7 @@ export default {
 }
 .dark-dialog {
   .el-dialog {
-    background: var(--dark-dialog-bg, #2d3a4b);
+    background: #11285e;
     border: 1px solid #425163;
     border-radius: 4px;
 
@@ -473,19 +476,14 @@ export default {
   background: rgba(15, 31, 56, 0.86) !important;
 }
 
-.three-model-container .el-table td,
-.three-model-container .el-table th.is-leaf {
-  background: rgba(15, 31, 56, 0.86) !important;
-  border-color: rgba(255, 255, 255, 0.08) !important;
-  color: #e6efff;
-}
 
 .three-model-container .el-table td {
   color: #ffffff !important;
+  background:  rgba(1, 25, 97) !important;
 }
 
 .three-model-container .el-table th {
-  background: rgba(30, 55, 95, 0.85) !important;
+  background: rgba(19, 59, 131) !important;
   color: #ffffff !important;
 }
 

+ 18 - 19
src/views/equipment/equipmentModel.vue

@@ -43,8 +43,8 @@
             <vab-icon :icon="['fas', row.zbModelIcon]"/>
           </template>
         </el-table-column>
-        <el-table-column prop="createBy" label="创建人" width="120" align="center" sortable/>
-        <el-table-column prop="createTime" label="创建时间" width="180" align="center" sortable/>
+        <el-table-column prop="createBy" label="创建人" align="center" width="220" sortable/>
+        <el-table-column prop="createTime" label="创建时间" align="center" width="180" sortable/>
         <el-table-column label="操作" fixed="right" align="center" width="220">
           <template slot-scope="{ row }">
             <div class="action-bar">
@@ -91,7 +91,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="装备型号名称" prop="zbModelName">
-              <el-input v-model="addForm.zbModelName" placeholder="请输入装备型号名称"/>
+              <el-input v-model="addForm.zbModelName" :maxlength="200" show-word-limit placeholder="请输入装备型号名称"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -169,7 +169,7 @@
           </el-col>
           <el-col :span="24">
             <el-form-item label="装备型号备注" prop="zbModelRemark">
-              <el-input v-model="addForm.zbModelRemark" type="textarea" :rows="4" placeholder="请输入装备型号备注"/>
+              <el-input v-model="addForm.zbModelRemark" :maxlength="200" show-word-limit type="textarea" :rows="4" placeholder="请输入装备型号备注"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -271,7 +271,7 @@ export default {
                 }
               }
             },
-            trigger: 'blur'
+            trigger: ['blur', 'change']
           }
         ]
       },
@@ -348,12 +348,16 @@ export default {
       this.selectedRows = val
     },
     handleEdit(row) {
-      this.addForm = {...row}
-      this.addForm.zbTypeId = Number(row.zbTypeId)
-      this.addForm.zbModelJson = JSON.parse(row.zbModelJson)
-      // getEquDetails(row.id).then(res => {
-      //   console.log(res)
-      // })
+      getEquModelDetails(row.id).then(res => {
+        if (res.code !== 0) {
+          this.addForm = {...row}
+          this.addForm.zbTypeId = Number(row.zbTypeId)
+          this.addForm.zbModelJson = JSON.parse(row.zbModelJson)
+          this.addForm.createBy = row.updateBy || '1'
+          return
+        }
+        this.addForm = {...res.data}
+      })
       this.addOrUpdateTitle = '编辑'
       this.addVisible = true
     },
@@ -441,7 +445,7 @@ export default {
 }
 .dark-dialog {
   .el-dialog {
-    background: var(--dark-dialog-bg, #2d3a4b);
+    background: #11285e;
     border: 1px solid #425163;
     border-radius: 4px;
 
@@ -530,19 +534,14 @@ export default {
   background: rgba(15, 31, 56, 0.86) !important;
 }
 
-.three-model-container .el-table td,
-.three-model-container .el-table th.is-leaf {
-  background: rgba(15, 31, 56, 0.86) !important;
-  border-color: rgba(255, 255, 255, 0.08) !important;
-  color: #e6efff;
-}
 
 .three-model-container .el-table td {
   color: #ffffff !important;
+  background:  rgba(1, 25, 97) !important;
 }
 
 .three-model-container .el-table th {
-  background: rgba(30, 55, 95, 0.85) !important;
+  background: rgba(19, 59, 131) !important;
   color: #ffffff !important;
 }
 

+ 15 - 16
src/views/equipment/equipmentType.vue

@@ -33,8 +33,8 @@
         <el-table-column type="selection" width="55"/>
         <el-table-column prop="zbTypeName" label="装备类型名称" width="120" align="center"/>
         <el-table-column prop="zbTypeRemark" label="装备类型备注"  align="center" show-overflow-tooltip/>
-        <el-table-column prop="createBy" label="创建人" width="120" align="center" sortable/>
-        <el-table-column prop="createTime" label="创建时间" width="180" align="center" sortable/>
+        <el-table-column prop="createBy" label="创建人" align="center" width="220" sortable/>
+        <el-table-column prop="createTime" label="创建时间" align="center" width="180" sortable/>
         <el-table-column label="操作" fixed="right" align="center" width="220">
           <template slot-scope="{ row }">
             <div class="action-bar">
@@ -73,12 +73,12 @@
         <el-row :gutter="16">
           <el-col :span="12">
             <el-form-item label="装备类型名称" prop="zbTypeName">
-              <el-input v-model.trim="addForm.zbTypeName" maxlength="200" placeholder="请输入装备类型名称"/>
+              <el-input v-model.trim="addForm.zbTypeName" :maxlength="200" show-word-limit placeholder="请输入装备类型名称"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="装备类型备注" prop="zbTypeRemark">
-              <el-input v-model="addForm.zbTypeRemark"placeholder="请输入装备类型备注" />
+              <el-input v-model="addForm.zbTypeRemark" :maxlength="200" show-word-limit placeholder="请输入装备类型备注" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -163,10 +163,14 @@ export default {
       this.selectedRows = val
     },
     handleEdit(row) {
-      this.addForm = {...row}
-      // getEquDetails(row.id).then(res => {
-      //   console.log(res)
-      // })
+      getEquTypeDetails(row.id).then(res => {
+        if(res.code !== 0) {
+          this.addForm = {...row}
+          this.addForm.createBy = row.updateBy || '1'
+          return
+        }
+        this.addForm = { ...res.data }
+      })
       this.addOrUpdateTitle = '编辑'
       this.addVisible = true
     },
@@ -239,7 +243,7 @@ export default {
 }
 .dark-dialog {
   .el-dialog {
-    background: var(--dark-dialog-bg, #2d3a4b);
+    background: #11285e;
     border: 1px solid #425163;
     border-radius: 4px;
 
@@ -328,19 +332,14 @@ export default {
   background: rgba(15, 31, 56, 0.86) !important;
 }
 
-.three-model-container .el-table td,
-.three-model-container .el-table th.is-leaf {
-  background: rgba(15, 31, 56, 0.86) !important;
-  border-color: rgba(255, 255, 255, 0.08) !important;
-  color: #e6efff;
-}
 
 .three-model-container .el-table td {
   color: #ffffff !important;
+  background:  rgba(1, 25, 97) !important;
 }
 
 .three-model-container .el-table th {
-  background: rgba(30, 55, 95, 0.85) !important;
+  background: rgba(19, 59, 131) !important;
   color: #ffffff !important;
 }
 

+ 6 - 4
src/views/planAndDeduction/childsTask/index.vue

@@ -356,10 +356,12 @@
               v-model="editForm.applyStatus"
               placeholder="请选择任务状态"
           >
-            <el-option label="暂存" value="暂存"></el-option>
-            <el-option label="定稿" value="定稿"></el-option>
-            <el-option label="已确认" value="已确认"></el-option>
-            <el-option label="已完成" value="已完成"></el-option>
+            <el-option
+              v-for="(item, index) in $getDictList('sys_childTask_status')"
+              :key="index"
+              :label="item.dictName"
+              :value="item.dictValue"
+            ></el-option>
           </el-select>
         </el-form-item>
 

+ 117 - 59
src/views/planningSchem/comprehensive/index.vue

@@ -37,7 +37,7 @@
           @export-plan="handleExportPlan"
           @link-to="(val) => linkTo(val, plan)"
         />
-        <el-empty v-else description="暂无方案数据" />
+        <el-empty v-else description="暂无方案数据"/>
       </template>
 
       <!-- 底部右侧分页 -->
@@ -57,27 +57,42 @@
 
     <!-- 干扰方案上传弹窗 -->
     <DarkDialog
-        :visible.sync="showInteUpload"
-        title="上传干扰方案"
-        width="50%">
-      <el-upload
+      :visible.sync="showInteUpload"
+      :title="inteHasFile"
+      width="50%">
+      <div v-if="inteHasFile === '上传干扰方案'">
+        <el-upload
           class="upload-demo"
           ref="inteUpload"
           action="#"
           :file-list="inteFileList"
-          accept=".doc,.docx,.pdf,.xlsx,.xls"
+          accept=".doc,.docx"
           :auto-upload="false"
           :on-change="handleInteFileChange"
           :limit="1"
-      >
-        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
-        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitInteUpload">
-          上传到服务器
-        </el-button>
-        <div slot="tip" class="el-upload__tip">
-          只能上传doc、docx、pdf、xlsx、xls格式的文件
-        </div>
-      </el-upload>
+        >
+          <!-- ,.pdf,.xlsx,.xls -->
+          <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
+          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitInteUpload">
+            上传到服务器
+          </el-button>
+          <div slot="tip" class="el-upload__tip">
+            只能上传doc、docx格式的文件
+          </div>
+        </el-upload>
+      </div>
+
+      <div v-else>
+        <el-table :data="grFileList" border>
+          <el-table-column label="文件名称" prop="fileName"></el-table-column>
+          <el-table-column label="文件类型" prop="fileType"></el-table-column>
+          <el-table-column label="操作" width="120px" align="center">
+            <template slot-scope="{row}">
+              <el-button @click="downFile(row)">下载</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="showInteUpload = false">取消</el-button>
       </span>
@@ -85,31 +100,46 @@
 
     <!-- 靶标方案上传弹窗 -->
     <DarkDialog
-        :visible.sync="showTargetUpload"
-        title="上传靶标方案"
-        width="50%">
-      <el-upload
+      :visible.sync="showTargetUpload"
+      :title="hasFile"
+      width="50%">
+      <div v-if="hasFile === '上传靶标方案'">
+        <el-upload
           class="upload-demo"
           ref="targetUpload"
           action="#"
           :file-list="targetFileList"
-          accept=".doc,.docx,.pdf,.xlsx,.xls"
+          accept=".doc,.docx"
           :auto-upload="false"
           :on-change="handleTargetFileChange"
           :limit="1"
-      >
-        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
-        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitTargetUpload">
-          上传到服务器
-        </el-button>
-        <div slot="tip" class="el-upload__tip">
-          只能上传doc、docx、pdf、xlsx、xls格式的文件
-        </div>
-      </el-upload>
+        >
+          <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
+          <el-button style="margin-left: 10px;" size="small" type="success" @click="submitTargetUpload">
+            上传到服务器
+          </el-button>
+          <div slot="tip" class="el-upload__tip">
+            只能上传doc、docx格式的文件
+          </div>
+        </el-upload>
+      </div>
+      <div v-else>
+        <el-table :data="bbFileList" border>
+          <el-table-column label="文件名称" prop="fileName"></el-table-column>
+          <el-table-column label="文件类型" prop="fileType"></el-table-column>
+          <el-table-column label="操作" width="120px" align="center">
+            <template slot-scope="{row}">
+              <el-button @click="downFile(row)">下载</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </div>
+
       <span slot="footer" class="dialog-footer">
         <el-button @click="showTargetUpload = false">取消</el-button>
       </span>
     </DarkDialog>
+
     <!-- 任务详情弹窗 -->
     <DarkDialog title="任务详情"
                 :visible.sync="dialogVisible"
@@ -143,9 +173,10 @@ import {
   planningSchemeUploadTarget
 } from "@/api/planningScheme";
 import {exportSolutionToWord} from "@/views/planningSchem/comprehensive/wordExporter";
-import { baseURL,contentType,tokenName } from "@/config";
+import {baseURL, contentType, tokenName} from "@/config";
 import store from "@/store";
 import {doUpload} from "@/api/tool/ossTool";
+// import Docx from 'docxjs'
 
 export default {
   components: {
@@ -155,6 +186,10 @@ export default {
   },
   data() {
     return {
+      hasFile: '上传靶标方案',
+      inteHasFile: '上传干扰方案',
+      bbFileList: [],
+      grFileList: [],
       tableData: [
         {
           date: '2023-06-01',
@@ -173,11 +208,11 @@ export default {
         taskName: '',
         taskCode: ''
       },
-      plans:[],
+      plans: [],
       planss: [
         {
           id: '1',
-          fightAway:"对陆",
+          fightAway: "对陆",
           planName: '新型导弹打击试验',
           taskName: '新型导弹打击试验',
           taskCode: 'TASK-2023-001',
@@ -191,7 +226,7 @@ export default {
         },
         {
           id: '2',
-          fightAway:"对陆",
+          fightAway: "对陆",
           planName: '电子对抗演练',
           taskName: '电子对抗演练',
           taskCode: 'TASK-2023-002',
@@ -205,7 +240,7 @@ export default {
         },
         {
           id: '4',
-          fightAway:"对陆",
+          fightAway: "对陆",
           planName: '电子对抗演练',
           taskName: '电子对抗演练',
           taskCode: 'TASK-2023-003',
@@ -220,7 +255,7 @@ export default {
 
         {
           id: '3',
-          fightAway:"对陆",
+          fightAway: "对陆",
           planName: '新型导弹打击试验',
           taskName: '新型导弹打击试验',
           taskCode: 'TASK-2023-003',
@@ -234,7 +269,7 @@ export default {
         },
         {
           id: '9',
-          fightAway:"对陆",
+          fightAway: "对陆",
           planName: '电子对抗演练',
           taskName: '电子对抗演练',
           taskCode: 'TASK-2023-001',
@@ -252,7 +287,7 @@ export default {
         pageSize: 10,
         total: 0
       },
-      selectPlan:null,
+      selectPlan: null,
       showAdvancedSearch: false,
       showInteUpload: false,    // 干扰方案上传弹窗
       showTargetUpload: false,  // 靶标方案上传弹窗
@@ -264,6 +299,20 @@ export default {
     this.handleQuery();
   },
   methods: {
+    // 下载文件
+    downFile(data) {
+      const fileUrl = data.fileHttp;
+      if (!fileUrl) {
+        this.$message.error('文件链接不存在,无法下载');
+        return;
+      }
+      const a = document.createElement('a');
+      a.href = fileUrl;
+      a.download = data.fileName; // 可根据需求从 data 中取文件名,如 data.fileName
+      document.body.appendChild(a);
+      a.click();
+      document.body.removeChild(a);
+    },
 
     // 页面导航方法
     navigateTo(type, isOk) {
@@ -277,19 +326,19 @@ export default {
 
     // 干扰方案上传成功处理
     async handleInteUploadSuccess(response, file, fileList) {
-      if(response.code !==200){
+      if (response.code !== 200) {
         this.$message.success('干扰方案上传失败');
         return;
       }
       this.$message.success('干扰方案上传成功');
 
       const fileJson = JSON.stringify(
-          fileList.map(item => ({
-            fileName: item.name,
-            fileHttp: item.response?.data?.url || '',
-            fileType: item.response?.data?.type || '',
-            type: 1
-          })).filter(item => item.fileHttp)
+        fileList.map(item => ({
+          fileName: item.name,
+          fileHttp: item.response?.data?.url || '',
+          fileType: item.response?.data?.type || '',
+          type: 1
+        })).filter(item => item.fileHttp)
       );
 
       try {
@@ -309,10 +358,9 @@ export default {
     },
 
 
-
     // 靶标方案上传成功处理
     async handleTargetUploadSuccess(response, file, fileList) {
-      if(response.code !==200){
+      if (response.code !== 200) {
         this.$message.success('靶标方案上传失败');
         return;
       }
@@ -320,12 +368,12 @@ export default {
 
       // 1. 将 fileList 转为 JSON(和干扰方案保持一致)
       const fileJson = JSON.stringify(
-          fileList.map(item => ({
-            fileName: item.name,
-            fileHttp: item.response?.data?.url || '',
-            fileType: item.response?.data?.type || '',
-            type: 2
-          })).filter(item => item.fileHttp) // 过滤掉上传失败的文件
+        fileList.map(item => ({
+          fileName: item.name,
+          fileHttp: item.response?.data?.url || '',
+          fileType: item.response?.data?.type || '',
+          type: 2
+        })).filter(item => item.fileHttp) // 过滤掉上传失败的文件
       );
 
       try {
@@ -514,7 +562,7 @@ export default {
     },
 
     handleViewDetail(plan) {
-      this.$router.push({ path: '/planningSchem/overallPlanDesign',query:{batchId:plan.batchId} })
+      this.$router.push({path: '/planningSchem/overallPlanDesign', query: {batchId: plan.batchId}})
     },
     //导出
     async handleExportPlan(plan) {
@@ -532,16 +580,26 @@ export default {
       // 根据不同类型和状态判断显示上传还是跳转
       if (val.type === "inte" && plan.interferenceSchemeStatus === '未导入') {
         console.log("干扰方案未导入,显示上传组件")
+        this.inteHasFile = '上传干扰方案'
         this.selectPlan = plan;
         this.showInteUpload = true;
       } else if (val.type === "target" && plan.targetSchemeStatus === '未导入') {
         console.log("靶标方案未导入,显示上传组件")
+        this.hasFile = '上传靶标方案'
         this.selectPlan = plan;
         this.showTargetUpload = true;
-      } else if (val.type === "meas" && plan.measurementSchemeStatus === '未编制' ) {
-        this.$router.push({path: "/childPlan/measPlan", query: {plan:JSON.stringify(plan)}})
-      } else if (val.type === 'meas' && plan.measurementSchemeStatus === '已编制' ) {
-        this.$router.push({ path: '/home/collaborativeCreate_Cl',query:{plan:JSON.stringify(plan),isEdit:'false'} });
+      } else if (val.type === "meas" && plan.measurementSchemeStatus === '未编制') {
+        this.$router.push({path: "/childPlan/measPlan", query: {plan: JSON.stringify(plan)}})
+      } else if (val.type === 'meas' && plan.measurementSchemeStatus === '已编制') {
+        this.$router.push({path: '/home/collaborativeCreate_Cl', query: {plan: JSON.stringify(plan), isEdit: 'false'}});
+      } else if (val.type === "inte" && plan.interferenceSchemeStatus === '已导入') {
+        this.grFileList = JSON.parse(plan.schemeSubPlan)
+        this.inteHasFile = '查看干扰方案'
+        this.showInteUpload = true;
+      } else if (val.type === "target" && plan.targetSchemeStatus === '已导入') {
+        this.bbFileList = JSON.parse(plan.schemeSubPlan)
+        this.hasFile = '查看靶标方案'
+        this.showTargetUpload = true;
       } else {
         // 已导入/已编制状态正常跳转
         this.navigateTo(val.type, val.isOk);
@@ -552,8 +610,8 @@ export default {
       // 查询逻辑
       const res = await planningSchemePage({
         ...this.queryForm,
-        pageNo:this.pagination.currentPage,
-        pageSize:this.pagination.pageSize,
+        pageNo: this.pagination.currentPage,
+        pageSize: this.pagination.pageSize,
       })
       this.plans = res.data.records
       this.pagination.total = res.data.total