liling преди 2 месеца
родител
ревизия
92442db908

+ 16 - 0
src/api/iedNetwork/index.js

@@ -197,4 +197,20 @@ export function fcdaList(query) {
   })
 }
 
+export function doiMappingSave(data){
+   return request({
+    url: '/admin/doi/mapping/save',
+    method: 'post',
+    params: data
+  }) 
+}
+
+export function doiMappingList(query) {
+  return request({
+    url: '/admin/doi/mapping/list',
+    method: 'get',
+    params: query
+  })
+}
+
 

+ 4 - 2
src/pages/login/LoginNow.vue

@@ -57,7 +57,7 @@ export default {
   setup() {
     let less = ref("");
     let loginForm = ref({
-      username: "",
+      username: "Administrator",
       userpass: "",
     });
     let isLogin = ref(false);
@@ -115,7 +115,9 @@ export default {
               windowEx.Position("center");
             }
             router.push("/home/mission");
-            userStoreCode.GlobalCodes();
+            setTimeout(() => {
+              userStoreCode.GlobalCodes();
+            }, 200);            
             ElMessage({
               message: "登陆成功!",
               type: "success",

+ 297 - 17
src/pages/mission/components/CreateMis.vue

@@ -188,6 +188,7 @@
           <el-tree
             :props="anyProps"
             :data="anyData"
+            v-loading="treeLoading"
             @node-click="handleCheckChange"
             node-key="id"
             highlight-current
@@ -272,14 +273,14 @@
                 >
               </div> -->
               <div class="choose-base" @click="checkTime">追加装置</div>
-              <div class="choose-base" @click="setIedExtrefNo">端子编号</div>
+              <div class="choose-base" @click="setIedExtrefNo">支路编号</div>
               <!-- <div style="margin: 5px">
                 <el-button
                   type="primary"
                   size="small"
                   plain
                   @click="setIedExtrefNo"
-                  >端子编号</el-button
+                  >支路编号</el-button
                 >
               </div> -->
             </div>
@@ -309,12 +310,11 @@
       </div>
       <div v-if="successScd">
         <el-button class="backs cancel-add" @click="backMent">返回</el-button>
-        <el-button style="width: 100px; height: 30px" @click="aginParseArea"
+        <el-button style="width: 100px; height: 30px;" @click="aginParseArea"
           >重新解析</el-button
         >
-        <el-button class="sure-add" type="primary" @click="iedSave"
-          >保存</el-button
-        >
+        <el-button class="backs cancel-add" @click="PointsMapping">端子匹配管理</el-button>
+        <el-button class="sure-add" type="primary" @click="iedSave">保存</el-button>        
       </div>
     </div>
     <!-- 模态框组件 -->
@@ -344,6 +344,7 @@
         v-if="iedModal"
         :iedModal="iedModal"
         :loadScdId="loadScdId"
+        :iedTypes="areaIedTypes"
         @iedBack="iedBack"
         @iedArrBack="iedArrBack"
       >
@@ -415,6 +416,141 @@
         </span>
       </template>
     </el-dialog>
+
+    <el-dialog v-model="openIntervalPointsMapping"
+      width="70vw"
+      style="height: 740px"
+      append-to-body
+      draggable>
+      <template #header>
+        <div class="my-header">
+          <div class="title">间隔端子映射管理</div>
+        </div>
+      </template>
+      <el-form>
+        <el-row :gutter="20">
+          <el-col :xs="24" :sm="12" :md="8" :lg="6">
+            <el-form-item label="接收装置:" col=4>
+              <el-select
+                v-model="rev_ied_name"
+                placeholder="请选择"
+                clearable
+                style="width: 200px"
+                @change="revIedChange"
+              >
+                <el-option
+                  v-for="dict in mx"
+                  :key="dict.ied_name"
+                  :label="dict.attr_desc"
+                  :value="dict.ied_name"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6">
+            <el-form-item label="输入装置:"  col=4>
+              <el-select
+                v-model="in_ied_name"
+                placeholder="请选择"
+                clearable
+                style="width: 200px"
+                @change="inIedChange"
+              >
+                <el-option
+                  v-for="dict in mx"
+                  :key="dict.ied_name"
+                  :label="dict.attr_desc"
+                  :value="dict.ied_name"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6">
+            <el-button @click="newPointsMapping" class="cancel-add">新增端子</el-button>
+          </el-col>
+        </el-row>
+      </el-form> 
+      <el-table :data="pingotstableData" v-loading="loadPpingotstableData" style="width: 100%;height: calc(100vh - 420px);text-align: center;">
+                    <el-table-column label="序号" width="60" header-align="center">
+                        <template #default="scope">
+                            <span>{{ scope.$index + 1 }}</span>
+                        </template>
+                    </el-table-column>
+                    <el-table-column label="信号接收装置" header-align="center">
+                      <el-table-column prop="ied_name" label="装置名称" header-align="center"  width="100">
+                      </el-table-column>
+                      <el-table-column prop="attr_desc" label="装置描述" header-align="center">
+                        <template #default="scope">
+                          <span v-if="scope.row.flag!='new'">{{ getIedDesc(scope.row.ied_name) }}</span>
+                          <el-select v-else
+                            v-model="scope.row.attr_desc"
+                            placeholder="请选择"
+                            @change="newMappingIedSelected"
+                          >
+                            <el-option
+                              v-for="dict in mx"
+                              :key="dict.ied_name"
+                              :label="dict.attr_desc"
+                              :value="dict.ied_name"
+                            />
+                          </el-select>
+                        </template>
+                      </el-table-column>
+                      <el-table-column prop="doi_desc" label="端子名称" header-align="center">
+                        <template #default="scope">
+                          <el-input v-model="scope.row.doi_desc"/>
+                        </template>
+                      </el-table-column>
+                    </el-table-column>
+                    <el-table-column label="" header-align="center" width="50">&lt;-</el-table-column>
+                    <el-table-column label="信号输入装置" header-align="center">
+                      <el-table-column prop="in_ied_name" label="名称" header-align="center"  width="100"/>
+                      <el-table-column prop="in_ied_desc" label="描述" header-align="center">
+                        <template #default="scope">
+                          <span v-if="scope.row.flag!='new'">{{ getIedDesc(scope.row.in_ied_name) }}</span>
+                          <el-select v-else
+                            v-model="scope.row.in_ied_desc"
+                            placeholder="请选择"
+                            @change="newMappingInIedSelected"
+                          >
+                            <el-option
+                              v-for="dict in mx"
+                              :key="dict.ied_name"
+                              :label="dict.attr_desc"
+                              :value="dict.ied_name"
+                            />
+                          </el-select>
+                        </template>
+                      </el-table-column>
+                      <el-table-column prop="in_doi_desc" label="端子名称" header-align="center">
+                        <template #default="scope">
+                          <el-input v-model="scope.row.in_doi_desc"/>
+                        </template>
+                      </el-table-column>
+                    </el-table-column>
+                    <el-table-column fixed="right" label="操作" width="100" header-align="center">
+                        <template #default="scope">
+                            <!-- <el-popconfirm title="确认删除吗?" @confirm="firmSure">
+                            <template #reference> -->
+                            <el-button link type="primary" size="small" style="color: red;"
+                                @click="delPointsMapping(scope.row)">删除</el-button>
+                            <!-- </template>
+                            </el-popconfirm> -->
+                        </template>
+                    </el-table-column>
+      </el-table>
+      <template #footer>
+        <span
+          class="dialog-footer"
+          style="display: flex; justify-content: center"
+        >
+          <el-button type="primary" class="sure-add" @click="savePointsMapping">
+            保存
+          </el-button>
+          <el-button @click="cancelClick" class="cancel-add">取消</el-button>
+        </span>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -434,6 +570,7 @@ import report from "@/api/report";
 import scd from "@/api/scd";
 import task from "@/api/task";
 import cid from "@/api/cid/cid";
+import {fcdaList,doiMappingSave,doiMappingList} from "@/api/iedNetwork";
 import LookScd from "../modalComp/LookScd.vue";
 import ModelTree from "../modalComp/ModelTree.vue";
 import FlashCreate from "../modalComp/FlashCreate.vue";
@@ -465,6 +602,13 @@ const props = defineProps({
 });
 let selects = props.btnSelect;
 let arrList = props.taskList;
+let treeLoading = ref(true);
+const openIntervalPointsMapping = ref(false);
+const pingotstableData=ref([]);
+const loadPpingotstableData=ref(true)
+const rev_ied_name = ref('');
+const in_ied_name = ref('');
+let pointsDataAll=[];
 let newMission = ref({
   misName: "",
   misNum: "",
@@ -524,6 +668,7 @@ let textIs = ref(false);
 let filterLength = ref(0); //装置筛选有无attr_desc属性时的数组长度
 let editTask_models = ref([]); //编辑任务时的原模型列表。保存时需要与选择的模型进行差异对比
 const spaceInterval = ref([]); //所属间隔的数据
+let areaIedTypes = ref('');
 watch(
   () => props.editRow,
   (newVal) => {
@@ -592,11 +737,23 @@ const reload = () => {
   }
 };
 const modelId = ref(null);
-const areaType = ref("");
+const isSaveing = ref(false);
+let iedMaps={};
+const getIedDesc =(iedname)=>{
+  var v = iedMaps[iedname];
+  if(v==null){
+    var x1 = mx.value.filter((item)=>item.ied_name==iedname);
+    v=x1[0].attr_desc;
+    iedMaps[iedname] = v;
+  }
+  return v;
+}
 const loadAreaInfo = (scdid) => {
   mx.value = [];
+  treeLoading.value = true;
   scd.getLoadScd({ scd_id: scdid }).then((res) => {
     iedLoading.value = false;
+    treeLoading.value = false;
     if (res.code == 0) {
       successScd.value = true;
       anyData.value = [];
@@ -776,10 +933,10 @@ const nowUpload = (e) => {
 };
 //树形组件
 const handleCheckChange = (e) => {
-  console.log("e====", e);
   jg.value = e.area_name;
   loadAreaId.value = e.area_id;
   flashLevel.value = e.model_name.split("]")[1];
+  areaIedTypes.value = e.ied_types;
   //优先从间隔结果中查找其ied装置列表,如果没找到,则尝试调用接口获取
   let areaInfo = anyData.value.filter((r) => {
     return r.area_id == e.area_id;
@@ -876,7 +1033,6 @@ const iedSave = () => {
     });
 };
 const tagClose = (row, num) => {
-  console.log("row", row, num);
   ElMessageBox.confirm(
     "确认从该间隔移除当前装置" + row.ied_name + "吗?",
     "删除装置"
@@ -896,6 +1052,133 @@ const tagClick = (row, num) => {
   // 将当前点击的对象的 isChoose 属性设置为 true
   row.isChoose = true;
 };
+const revIedChange=(item)=>{
+  if(item==''){
+    if(in_ied_name.value=='') pingotstableData.value = pointsDataAll;
+    else inIedChange(in_ied_name.value)
+    return;
+  }
+  var newLst = pointsDataAll.filter((ele) => (in_ied_name.value==''||ele.in_ied_name==in_ied_name.value) && ele.ied_name==item);
+  pingotstableData.value = newLst;
+}
+const inIedChange=(item)=>{
+  if(item==''){
+    if(rev_ied_name.value=='') pingotstableData.value = pointsDataAll;
+    else revIedChange(rev_ied_name.value);
+    return;
+  }
+  var newLst = pointsDataAll.filter((ele) => (rev_ied_name.value==''||ele.ied_name==rev_ied_name.value) &&  ele.in_ied_name==item);
+  pingotstableData.value = newLst;
+}
+//打开端子匹配管理
+const PointsMapping= async ()=>{
+  if(loadAreaId.value==''){
+    ElMessage({
+      type: "info",
+      message: "请先选择一个间隔!",
+      duration: 3000,
+    })
+    return;
+  }
+  loadPpingotstableData.value = true;
+  openIntervalPointsMapping.value=true;
+  rev_ied_name.value='';
+  in_ied_name.value='';
+  var tmp =[];
+  var iedNames = mx.value.map((item) => item.ied_name).join(",");
+  mx.value.forEach(async (item) => {
+    let data=null;
+    data = await doiMappingList({station_id:0,area_id:loadAreaId.value * 1,ied_name:item.ied_name});
+    if(data==null || data.data==null){
+      data = await fcdaList({
+        scd_id: loadScdId.value*1,
+        area_ids: null,
+        ied_name: item.ied_name,
+      });
+    }
+    if (data && data.data){
+      var t1 = data.data;
+      tmp = tmp.concat(t1.filter((item) => iedNames.indexOf(item.in_ied_name)>-1));
+      pingotstableData.value = tmp;
+      pointsDataAll = tmp;
+    }
+  });  
+  loadPpingotstableData.value = false;
+}
+const newPointsMapping=()=>{
+  rev_ied_name.value='';
+  in_ied_name.value='';
+  pingotstableData.value = pointsDataAll;
+  var info={
+    flag:'new',attr_desc: "",attr_name: "",doi_desc: "",ied_name: "",in_doi_desc: "",in_ied_desc: "",in_ied_name: "",
+  }
+  var t = pingotstableData.value
+  t.unshift(info);
+  pingotstableData.value = t;
+}
+//保存端子配置
+const savePointsMapping= async()=>{
+  if(isSaveing.value){
+    return;
+  }
+  isSaveing.value=true
+  let msg = ElMessage({
+        type: "success",
+        message: '正在保存数据中...',
+        duration: 0,
+  });
+  var datalist = JSON.stringify(pointsDataAll);
+  var data = await doiMappingSave({station_id:0,area_id:loadAreaId.value * 1,datalist:datalist});
+  msg.close();
+  isSaveing.value = false;
+  if(data.code!=0){
+      ElMessage({
+        type: "error",
+        message: data.msg,
+        duration: 3000,
+      });
+      return;
+  }
+  ElMessage({
+        type: "success",
+        message: '保存成功!',
+        duration: 3000,
+  });
+  openIntervalPointsMapping.value = false;
+}
+const delPointsMapping=(row)=>{
+  var tmp = pingotstableData.value;
+  var delInd = -1;
+  for(var i=0;i<tmp.length;i++){
+    var ele = tmp[i];
+    if(ele.in_ied_name==row.in_ied_name && ele.doi_desc==row.doi_desc && ele.in_doi_desc==row.in_doi_desc && ele.attr_name==row.attr_name){
+      delInd = i;
+      break
+    }
+  }
+  if(delInd>-1) {
+    tmp.splice(delInd,1);
+    pingotstableData.value = tmp;
+  }
+  delInd = -1;
+  for(var i=0;i<pointsDataAll.length;i++){
+    var ele = pointsDataAll[i];
+    if(ele.in_ied_name==row.in_ied_name && ele.doi_desc==row.doi_desc && ele.in_doi_desc==row.in_doi_desc && ele.attr_name==row.attr_name){
+      delInd = i;
+      break
+    }
+  }
+  if(delInd>-1) {
+    pointsDataAll.splice(delInd,1);
+  }
+}
+const newMappingIedSelected=(v)=>{
+  pingotstableData.value[0].attr_name = v;
+  pingotstableData.value[0].ied_name = v;
+}
+const newMappingInIedSelected=(v)=>{
+  pingotstableData.value[0].in_ied_name = v;
+}
 //打开选择ied
 const checkTime = () => {
   iedModal.value = true;
@@ -991,13 +1274,11 @@ const setIedExtrefNo = () => {
   )
     .then(({ value }) => {
       // 用户点击确定,value 是输入的内容
-      scd
-        .setAreaIedNo({
+      scd.setAreaIedNo({
           area_id: loadAreaId.value * 1,
           ied_name: ied[0].attr_name,
           ied_no: value,
-        })
-        .then((res) => {
+        }).then((res) => {
           if (res != null && res.code == 0) {
             ElMessage({
               message: "操作成功",
@@ -1011,12 +1292,11 @@ const setIedExtrefNo = () => {
           } else {
             ElMessage({
               message: "操作失败:" + res.msg,
-              type: "success",
+              type: "error",
             });
           }
         });
-    })
-    .catch(() => {
+    }).catch(() => {
       // 用户点击取消或关闭对话框
     });
 };
@@ -1069,6 +1349,7 @@ const sureAdd = debounce(async () => {
 const cancelClick = () => {
   reset();
   openAddInterval.value = false;
+  openIntervalPointsMapping.value = false;
 };
 //删除间隔
 const delInterval = (data) => {
@@ -1116,7 +1397,6 @@ em {
   color: #5779d7;
   margin-right: 5px;
 }
-
 .createMisBox {
   width: 100%;
   height: calc(100vh - 150px);

+ 3 - 1
src/pages/mission/components/HaveMis.vue

@@ -73,7 +73,9 @@
             </div>
             <!-- 点击检测 -->
             <div class="setNow">
-              <span style="font-size: 16px;" class="setnowspan" @click="startBefore(item, index)">立即检测</span>
+              <span class="setnowspan" @click="goNetStructPicture(item)">scd可视化</span>
+              <span style="margin: 0 10px;" class="setnowspan">|</span>
+              <span style="font-size: 16px;" class="setnowspan" @click="startBefore(item, index)">立即检测</span>              
             </div>
           </div>
         </div>

+ 27 - 0
src/pages/mission/modalComp/CheckIed.vue

@@ -2,6 +2,9 @@
     <div>
         <el-dialog v-model="dialogVisible" draggable title="选择装置" width="30%" @close="sureclose"
             :close-on-click-modal="false">
+            <div style="margin-bottom: 3px;width: 90%;overflow-x: auto;border-bottom: 1px solid rgb(237, 237, 237);padding: 2px 20px;">
+                <el-button @click="filterIeds(ele.name)" v-for="ele in iedTypeList" style="padding: 3px;">{{ ele.name }}</el-button>
+            </div>
             <el-input v-model="filterText" style="width: 480px;margin-left: 23px;" placeholder="输入关键词查找,区分大小写" />
             <el-tree ref="treeRef" :data="treeList" :props="treeProps" :filter-node-method="filterNode"
                 @check-change="handleNodeClick" show-checkbox style="height: 300px;overflow-y: auto;" />
@@ -29,11 +32,16 @@ export default {
         loadScdId: {
             type: Number || String,
             required: true
+        },
+        iedTypes:{
+            type:String,
+            required: true
         }
     },
     setup(props, { emit }) {
         let dialogVisible = ref(false)
         let resultId = ref(0)
+        let iedTypeList = ref([]);
         let treeList = ref([])
         let checkArr = ref([])
         let treeProps = ref({
@@ -45,12 +53,29 @@ export default {
         watch(() => props.loadScdId, (newVal) => {
             resultId.value = newVal
         })
+        watch(() => props.iedTypes, (newVal) => {
+            iedTypes.value = newVal
+        })
         watch(filterText, (val) => {
             treeRef.value?.filter(val)
         })
+        function filterIeds(v){
+            treeRef.value?.filter(v)
+        }
         function reload() {
             dialogVisible.value = props.iedModal
             resultId.value = props.loadScdId
+            var ts = props.iedTypes.split(",");
+            var tmp = [];
+            var tmp1={};
+            for (let index = 0; index < ts.length; index++) {
+                const ele = ts[index];
+                var ied1 = ele.split("#")[0];  
+                if(tmp1[ied1]!=null) continue;
+                tmp.push({"name":ied1});
+                tmp1[ied1] = 1;
+            }
+            iedTypeList.value = tmp;
             scd.scdAllIed({ scd_id: resultId.value - 0 }).then(res => {
                 if (res.data != null) {
                     treeList.value = res.data.map(item => {
@@ -102,11 +127,13 @@ export default {
             sureArr: modalSure,
             treeList,
             treeProps,
+            iedTypeList,
             handleNodeClick,
             checkArr,
             filterText,//树形节点过滤
             treeRef,//树形节点的ref
             filterNode,//筛选树形节点数据方法
+            filterIeds,
         }
     }
 }

+ 19 - 2
src/pages/netStructPicture/components/inoutDialog.vue

@@ -39,8 +39,18 @@
               :key="index"
               :ref="(el) => setDialogLeftChild2(el, item)"
             >
-              <div>{{ item.to_doi_desc }}</div>
-              <div>{{ item.attr_int_addr }}</div>
+              <template v-if="titleUnusual == 'input'">
+                <div>{{ item.to_doi_desc }}</div>
+                <div>{{ item.attr_int_addr }}</div>
+              </template>
+              <template v-else>
+                <div>{{ item.from_doi_desc }}</div>
+                <div>
+                  {{
+                    `${item.attr_ld_inst}/${item.attr_prefix}${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
+                  }}
+                </div>
+              </template>
             </div>
           </div>
         </div>
@@ -75,12 +85,18 @@
               :key="index"
               :ref="(el) => setDialogRightChild2(el, item)"
             >
+            <template v-if="titleUnusual == 'input'">
               <div>{{ item.from_doi_desc }}</div>
               <div>
                 {{
                   `${item.attr_ld_inst}/${item.attr_prefix}${item.attr_ln_class}${item.attr_ln_inst}.${item.attr_do_name}.${item.attr_da_name}`
                 }}
               </div>
+            </template>
+            <template v-else>
+              <div>{{ item.to_doi_desc }}</div>
+              <div>{{ item.attr_int_addr }}</div>
+            </template>
             </div>
           </div>
         </div>
@@ -153,6 +169,7 @@ const cancelClick2 = () => {
 };
 //弹框画线
 const setDialogLine = () => {
+  console.log('======dir:',props.titleUnusual)
   dialogLines.value = [];
   for (const [key, value] of dialogListRightChild.value) {
     let line;

+ 11 - 6
src/pages/netStructPicture/newTitle/SlcCheck.vue

@@ -75,11 +75,11 @@
       >
         <div class="allMis">
           <div class="result">
-            <div @click="excelPort" class="anniu">
+            <div @click="excelPort(true)" class="anniu">
               <img :src="FileArrowUp" alt="" />
               <span>导出所有结果</span>
             </div>
-            <div @click="excelPort" class="anniu current-anniu">
+            <div @click="excelPort(false)" class="anniu current-anniu">
               <img :src="FileArrowUp" alt="" />
               <span>导出当前节点结果</span>
             </div>
@@ -361,14 +361,17 @@ const handleCurrentChange = (val) => {
 const common = async () => {
   tableData.value = null;
   tableLoading.value = true;
+  console.log(clickTreeData.value)
   const nodeName = clickTreeData.value ? clickTreeData.value.datatype : "";
   const nodeId = clickTreeData.value ? clickTreeData.value.id : "";
   const levels = levelClick.value ? levelClick.value : "";
+  const iedname = clickTreeData.value ? clickTreeData.value.ied_name : "";
   const res = await slc.getScdByIdFromMission({
     pageno: pageindex.value,
     pagesize: pagesize.value,
     scd_id: scdid.value,
     node_name: nodeName,
+    ied_name:iedname,
     node_id: nodeId,
     level: levels,
   });
@@ -423,9 +426,10 @@ const handleNodeClick = async (clickTree) => {
 //导出所有结果
 const exportModal = ref(false);
 const exportLink = ref("");
-const excelPort = () => {
+const excelPort = (isall) => {
   exportLink.value = "";
   const nodeName = clickTreeData.value ? clickTreeData.value.datatype : "";
+  const iedName = clickTreeData.value ? clickTreeData.value.ied_name : "";
   const nodeId = clickTreeData.value ? clickTreeData.value.id : "";
   exportModal.value = true;
   //导出excel
@@ -433,12 +437,13 @@ const excelPort = () => {
     code: "scl-check-result",
     caption: "SCL校验结果",
     expcols:
-      "line_no,CREATED_TIME,attr_name,attr_desc,alert_level,parse_result,apply_standard,apply_standard_no",
+      "line_no,CREATED_TIME,ied_name,ied_desc,alert_level,parse_result,apply_standard,apply_standard_no",
     expcolnames:
       "行号,日期,装置名称,装置描述,等级,校验结果内容,应用标准,标准条款",
     scd_id: scdid.value,
-    node_name: nodeName,
-    node_id: nodeId,
+    node_name: isall ? '' : nodeName,
+    ied_name:isall ? '' :iedName,
+    node_id: isall ? '' :nodeId,
   }).then((res) => {
     if (res.data) {
       exportLink.value = window.ApiServer + "/" + res.data;

+ 9 - 4
src/pages/report/components/ReportDetails.vue

@@ -271,11 +271,16 @@ export default {
     }
     // 生成报告
     function nowGet() {
-      report
-        .genderReport({
+      btnType.value = true;
+      var msg = ElMessage({
+              message: "正在生成报告中...",
+              type: "info",
+              duration:0,
+      });
+      report.genderReport({
           task_id: reportId.value - 0,
-        })
-        .then((res) => {
+        }).then((res) => {
+          msg.close();
           if (res.data != null) {
             fileId.value = res.data.TaskId;
             btnType.value = false;

+ 2 - 2
src/router/index.js

@@ -1,5 +1,5 @@
 // router/index.js
-import { createRouter, createWebHistory } from 'vue-router'
+import { createRouter, createWebHistory,createWebHashHistory } from 'vue-router'
 import { ElMessage } from 'element-plus'
 const routes = [
     // 添加更多路由信息
@@ -94,7 +94,7 @@ const routes = [
 ]
 
 const router = createRouter({
-    history: createWebHistory(),
+    history: createWebHashHistory(),
     routes,
 })
 router.beforeEach((to, from, next) => {