tangning недель назад: 3
Родитель
Сommit
b9495b91c6

+ 9 - 1
src/app/fire/view/dispatch/index.vue

@@ -4,7 +4,7 @@
     :pagging="pagging"
     :pagging="pagging"
     :checkPerm="isTeached ? 'cancel' : 'teach'"
     :checkPerm="isTeached ? 'cancel' : 'teach'"
     :isRecycle="isRecycle"
     :isRecycle="isRecycle"
-    @view-item="row => gotoQuery(row.caseId, appConstant.isSample)"
+    @view-item="row => gotoDetails(row)"
   >
   >
     <template v-slot:tableCtrl>
     <template v-slot:tableCtrl>
       <template v-if="!isRecycle">
       <template v-if="!isRecycle">
@@ -122,6 +122,7 @@ import { confirm } from "@/helper/message";
 import { addFire, editFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
 import { addFire, editFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
 import { shareCase } from "@/view/case/quisk";
 import { shareCase } from "@/view/case/quisk";
 import { ElMessage } from "element-plus";
 import { ElMessage } from "element-plus";
+import { RouteName, router } from "@/router";
 
 
 const { pagging, isTeached, isRecycle } = useFirePagging();
 const { pagging, isTeached, isRecycle } = useFirePagging();
 const copy = async (caseId: number) => {
 const copy = async (caseId: number) => {
@@ -174,4 +175,11 @@ const editHandler = async (row: Fire) => {
 const addHandler = async () => {
 const addHandler = async () => {
   (await addFire({})) && pagging.refresh();
   (await addFire({})) && pagging.refresh();
 };
 };
+const gotoDetails = (row: Fire) => {
+  const routeData = router.resolve({
+    path: `/fireDetails/${row.caseId}`,
+    query: { editOrShow: 'show' , fromRoute: 'fire' }
+  });
+  window.open(routeData.href, '_blank');
+};
 </script>
 </script>

+ 1 - 0
src/constant/camera.ts

@@ -6,6 +6,7 @@ export const cameraTypeDesc = {
   [CameraType.SWKK_L]: "四维看看lite",
   [CameraType.SWKK_L]: "四维看看lite",
   [CameraType.SWKK_LA]: "指房宝小红屋相机",
   [CameraType.SWKK_LA]: "指房宝小红屋相机",
   [CameraType.SWKJ]: "双目转台相机",
   [CameraType.SWKJ]: "双目转台相机",
+  [CameraType.SWSX]: "深寻相机",
   [CameraType.SWSS1]: "激光转台相机",
   [CameraType.SWSS1]: "激光转台相机",
   [CameraType.SWSS2]: "激光移动相机",
   [CameraType.SWSS2]: "激光移动相机",
 };
 };

+ 3 - 0
src/constant/scene.ts

@@ -9,6 +9,7 @@ export const SceneTypeDesc: { [key in SceneType]: string } = {
   [SceneType.SWSSMX]: "激光转台",
   [SceneType.SWSSMX]: "激光转台",
   [SceneType.SWYDSS]: "激光移动",
   [SceneType.SWYDSS]: "激光移动",
   [SceneType.SWYDMX]: "激光移动",
   [SceneType.SWYDMX]: "激光移动",
+  [SceneType.SWSX]: "深寻",
   // [SceneType.QJKK]: '全景看看',
   // [SceneType.QJKK]: '全景看看',
 };
 };
 
 
@@ -20,6 +21,7 @@ export const SceneTypeDomain: { [key in SceneType]: string } = {
   [SceneType.SWSSMX]: window.location.href,
   [SceneType.SWSSMX]: window.location.href,
   [SceneType.SWYDSS]: window.location.href,
   [SceneType.SWYDSS]: window.location.href,
   [SceneType.SWYDMX]: window.location.href,
   [SceneType.SWYDMX]: window.location.href,
+  [SceneType.SWSX]: window.location.href,
 };
 };
 
 
 export const SceneTypePaths: { [key in SceneType]: string[] } = {
 export const SceneTypePaths: { [key in SceneType]: string[] } = {
@@ -30,6 +32,7 @@ export const SceneTypePaths: { [key in SceneType]: string[] } = {
   ],
   ],
   [SceneType.SWKJ]: ["/swkk/spg.html", "/swkk/epg.html"],
   [SceneType.SWKJ]: ["/swkk/spg.html", "/swkk/epg.html"],
   [SceneType.SWSS]: ["/swss/index.html", "/swss/index.html"],
   [SceneType.SWSS]: ["/swss/index.html", "/swss/index.html"],
+  [SceneType.SWSX]: ["/swss/index.html", "/swss/index.html"],
   [SceneType.SWMX]: import.meta.env.DEV
   [SceneType.SWMX]: import.meta.env.DEV
     ? ["/dev-code/index.html", "/dev-code/index.html"]
     ? ["/dev-code/index.html", "/dev-code/index.html"]
     : ["/code/index.html", "/code/index.html"],
     : ["/code/index.html", "/code/index.html"],

+ 1 - 1
src/request/index.ts

@@ -163,7 +163,7 @@ axios.interceptors.request.use(async (config) => {
 
 
 const responseInterceptor = (res: AxiosResponse<any, any>) => {
 const responseInterceptor = (res: AxiosResponse<any, any>) => {
   closeLoading();
   closeLoading();
-  const hasIgnore = res.config.params
+  const hasIgnore = res.config && res.config.params
     ? "ingoreRes" in res.config.params
     ? "ingoreRes" in res.config.params
     : false;
     : false;
   console.log(res, 'responseInterceptor')
   console.log(res, 'responseInterceptor')

+ 1 - 0
src/store/camera.ts

@@ -15,6 +15,7 @@ export enum CameraType {
   SWKK_L = 2,
   SWKK_L = 2,
   SWKK_LA = 5,
   SWKK_LA = 5,
   SWKJ = 9,
   SWKJ = 9,
+  SWSX = 8,
   SWSS1 = 10,
   SWSS1 = 10,
   SWSS2 = 11,
   SWSS2 = 11,
 }
 }

+ 6 - 3
src/store/case.ts

@@ -99,7 +99,7 @@ export const getSceneKey = (scene: Scene) =>
 
 
 export type CaseScenes = { type: SceneType; numList: (string | number)[] }[];
 export type CaseScenes = { type: SceneType; numList: (string | number)[] }[];
 export const getCaseScenes = (scenes: Scene[]) => {
 export const getCaseScenes = (scenes: Scene[]) => {
-  console.log(scenes, 'scenes')
+  console.log(scenes, 'scenes', 'SceneType', SceneType)
   const typeIdents = [
   const typeIdents = [
     { type: SceneType.SWKJ, numList: [] },
     { type: SceneType.SWKJ, numList: [] },
     { type: SceneType.SWKK, numList: [] },
     { type: SceneType.SWKK, numList: [] },
@@ -108,10 +108,12 @@ export const getCaseScenes = (scenes: Scene[]) => {
     { type: SceneType.SWSSMX, numList: [] },
     { type: SceneType.SWSSMX, numList: [] },
     { type: SceneType.SWYDSS, numList: [] },
     { type: SceneType.SWYDSS, numList: [] },
     { type: SceneType.SWYDMX, numList: [] },
     { type: SceneType.SWYDMX, numList: [] },
+    { type: SceneType.SWSX, numList: [] },
   ] as CaseScenes;
   ] as CaseScenes;
-
+  console.log(scenes, 'scene.type')
   for (const scene of scenes) {
   for (const scene of scenes) {
     const typeIdent = typeIdents.find((ident) => ident.type === scene.type)!;
     const typeIdent = typeIdents.find((ident) => ident.type === scene.type)!;
+  console.log(typeIdent, 'scene.typeIdent')
     typeIdent.numList.push(getSceneKey(scene));
     typeIdent.numList.push(getSceneKey(scene));
   }
   }
   return typeIdents;
   return typeIdents;
@@ -168,7 +170,8 @@ export const exportCaseInquestInfo = async (caseId: number, id?: number): Promis
     params: { caseId, id, ingoreRes: true },
     params: { caseId, id, ingoreRes: true },
     responseType: "blob",
     responseType: "blob",
   });
   });
-  return res as any;
+  return (res as any).data;
+
 };
 };
 
 
 // 兼容两种入参:按案件查询或按提取清单ID查询
 // 兼容两种入参:按案件查询或按提取清单ID查询

+ 1 - 1
src/store/editCsae.ts

@@ -218,7 +218,7 @@ export const getCaseFilesOffline = async (props: { caseId: number; filesTypeId?:
 // - 勘验详情:{ inquest: {...} }
 // - 勘验详情:{ inquest: {...} }
 // - 提取清单:{ extractDetail: {...} }
 // - 提取清单:{ extractDetail: {...} }
 // 这里统一兼容,若有 content 为字符串则尝试 JSON.parse。
 // 这里统一兼容,若有 content 为字符串则尝试 JSON.parse。
-export const getCaseFileImageInfo = async (filesId: number): Promise<any> => {
+export const getCaseFileImageInfo = async (filesId: number | string): Promise<any> => {
   if (!filesId) return null;
   if (!filesId) return null;
   if (isOfflineMode()) {
   if (isOfflineMode()) {
     try {
     try {

+ 2 - 0
src/store/scene.ts

@@ -93,6 +93,8 @@ export enum SceneType {
   SWSSMX,
   SWSSMX,
   SWYDSS,
   SWYDSS,
   SWYDMX,
   SWYDMX,
+  SWSX1,
+  SWSX,
 }
 }
 
 
 // 模型场景状态
 // 模型场景状态

+ 1 - 1
src/view/case/addCaseFile.vue

@@ -102,7 +102,7 @@ defineExpose<QuiskExpose>({
       throw "附件标题不能为空!";
       throw "附件标题不能为空!";
     }
     }
 
 
-    await addCaseFile({ ...caseFile.value, imgType: props.imgType, file: file.value });
+    await addCaseFile({ ...caseFile.value, imgType: props.imgType || 0, file: file.value });
     return caseFile.value;
     return caseFile.value;
   },
   },
 });
 });

+ 6 - 3
src/view/case/newShare.vue

@@ -9,7 +9,8 @@
     <!-- 上级组织共享权限 -->
     <!-- 上级组织共享权限 -->
     <el-form-item class="org-share-item" label="上级组织共享权限">
     <el-form-item class="org-share-item" label="上级组织共享权限">
       <template #label>
       <template #label>
-        <span v-if="orgSharePerm == 'none' && viewScope == 'login'" style="color: red;line-height: 36px;">*</span><span>上级组织共享权限</span>
+        <!-- <span v-if="orgSharePerm == 'none' && viewScope == 'login'" style="color: red;line-height: 36px;">*</span> -->
+        <span>上级组织共享权限</span>
       </template>
       </template>
       <div class="org-share-row">
       <div class="org-share-row">
         <el-select v-model="selectedParentId" placeholder="上级组织名称">
         <el-select v-model="selectedParentId" placeholder="上级组织名称">
@@ -83,11 +84,13 @@ const copyPublicShare = async () => {
 
 
 // 确认提交:仅触发接口调用与保存设置
 // 确认提交:仅触发接口调用与保存设置
 const handleConfirm = async (showTips = false) => {
 const handleConfirm = async (showTips = false) => {
-  if (!showTips && !selectedParentId.value) {
+  if (orgSharePerm.value != 'none' && !selectedParentId.value) {
     ElMessage.error("请选择上级组织");
     ElMessage.error("请选择上级组织");
     return;
     return;
   }
   }
-
+  if(orgSharePerm.value == 'none' && !selectedParentId.value){
+    return "success";
+  }
   const isAuthMap: Record<"none" | "read" | "edit", number> = {
   const isAuthMap: Record<"none" | "read" | "edit", number> = {
     none: 0,
     none: 0,
     read: 1,
     read: 1,

+ 12 - 1
src/view/newFireCase/newFireDetails/components/headerTop.vue

@@ -4,7 +4,8 @@
       <el-icon v-if="showSave" class="back-icon" @click="$emit('back')">
       <el-icon v-if="showSave" class="back-icon" @click="$emit('back')">
         <ArrowLeft />
         <ArrowLeft />
       </el-icon>
       </el-icon>
-      <span v-if="isPreview != 'abstract' && editOrShow === 'edit'" class="edit-title">{{ typeName || '编辑' }}<span v-if="isPreview != 'abstract' && editOrShow === 'edit'" class="line">|</span></span><span>{{ headerTitle }}</span>
+      <span v-if="isPreview != 'abstract' && editOrShow === 'edit'" class="edit-title" style="min-width: 151px">{{ typeName || '编辑' }}<span v-if="isPreview != 'abstract' && editOrShow === 'edit'" class="line">|</span></span>
+      <div class="space-ellipsis">{{ headerTitle }}</div>
     </div>
     </div>
     <div class="right-title" v-if="editOrShow === 'edit'">
     <div class="right-title" v-if="editOrShow === 'edit'">
       <span class="change-btn" v-if="!showSave" @click="openRenameDialog"><i class="iconfont icon-rename" /></span>
       <span class="change-btn" v-if="!showSave" @click="openRenameDialog"><i class="iconfont icon-rename" /></span>
@@ -164,6 +165,7 @@ const handleExport = () => {
     color: #303133;
     color: #303133;
     display: flex;
     display: flex;
     align-items: center;
     align-items: center;
+    width: calc(100% - 200px);
     .back-icon{
     .back-icon{
       cursor: pointer;
       cursor: pointer;
       margin-right: 16px;
       margin-right: 16px;
@@ -193,6 +195,7 @@ const handleExport = () => {
   }
   }
   .right-title{
   .right-title{
     font-size: 32px;
     font-size: 32px;
+    min-width: 188px;
     :deep(.preview-btn){
     :deep(.preview-btn){
       background-color: transparent;
       background-color: transparent;
       color: var(--el-color-primary);
       color: var(--el-color-primary);
@@ -208,4 +211,12 @@ const handleExport = () => {
     margin: 24px;
     margin: 24px;
   }
   }
 }
 }
+/* 单行超出隐藏 + 省略号 */
+.space-ellipsis {
+  white-space: nowrap;    /* 强制文本一行显示,不换行 */
+  overflow: hidden;       /* 超出容器宽度的内容 隐藏 */
+  text-overflow: ellipsis;/* 超出的部分 显示省略号... */
+  width: calc(100% - 335px);           /* 必须给【固定宽度/最大宽度】,否则容器会被文本撑开,不会触发超出 */
+  display: inline-block;
+}
 </style>
 </style>

+ 1 - 1
src/view/newFireCase/newFireDetails/components/mix3d.vue

@@ -392,7 +392,7 @@ onMounted(async () => {
   display: flex;
   display: flex;
   .let-bar{
   .let-bar{
     width: 510px;
     width: 510px;
-    height: 100%;
+    height: calc(100% - 220px);
     overflow: auto;
     overflow: auto;
     // border-right: 1px solid #f0f0f0;
     // border-right: 1px solid #f0f0f0;
     .no-data{
     .no-data{

+ 46 - 32
src/view/newFireCase/newFireDetails/components/siteInspection.vue

@@ -150,7 +150,7 @@
                         </span>
                         </span>
                       </el-tooltip>
                       </el-tooltip>
                       <el-tooltip content="编辑" placement="top" v-if="rec.createType === 'online'">
                       <el-tooltip content="编辑" placement="top" v-if="rec.createType === 'online'">
-                        <span class="action-icon" @click="onEditInspection">
+                        <span class="action-icon" @click="onEditInspection(rec)">
                           <i class="iconfont icon-Edit" />
                           <i class="iconfont icon-Edit" />
                         </span>
                         </span>
                       </el-tooltip>
                       </el-tooltip>
@@ -193,7 +193,7 @@
                       </span>
                       </span>
                     </el-tooltip>
                     </el-tooltip>
                     <el-tooltip content="编辑" placement="top" v-if="rec.createType === 'online'">
                     <el-tooltip content="编辑" placement="top" v-if="rec.createType === 'online'">
-                      <span class="action-icon" @click="onEditExtraction">
+                      <span class="action-icon" @click="onEditExtraction(rec)">
                         <i class="iconfont icon-Edit" />
                         <i class="iconfont icon-Edit" />
                       </span>
                       </span>
                     </el-tooltip>
                     </el-tooltip>
@@ -353,7 +353,7 @@ import SiteText from './sitetext.vue';
 import ManifestText from './manifesttext.vue';
 import ManifestText from './manifesttext.vue';
 // 弹窗已移除,直接跳转到绘制页面
 // 弹窗已移除,直接跳转到绘制页面
 import { CaseFile, BoardType, setCaseFile, delCaseFile } from '@/store/caseFile';
 import { CaseFile, BoardType, setCaseFile, delCaseFile } from '@/store/caseFile';
-import { getCaseFileImageInfo } from '@/store/editCsae';
+import { getCaseFileImageInfo, getFusionAndSceneList } from '@/store/editCsae';
 import { FileDrawType } from '@/constant/caseFile';
 import { FileDrawType } from '@/constant/caseFile';
 import { addCaseFile as addCaseFileDialog } from '@/view/case/quisk';
 import { addCaseFile as addCaseFileDialog } from '@/view/case/quisk';
 import { router, RouteName } from '@/router';
 import { router, RouteName } from '@/router';
@@ -416,7 +416,7 @@ const loadListsFromTree = async () => {
       url: item.listCover || item.filesUrl || item.cover || item.url,
       url: item.listCover || item.filesUrl || item.cover || item.url,
       name: item.filesTitle || item.title || '未命名',
       name: item.filesTitle || item.title || '未命名',
     });
     });
-    const isPlane = (i: any) => (!Boolean(i.overviewId) && Boolean(i.tabulationId)) || i.imgType === 0 || i.imgType === '0';
+    const isPlane = (i: any) => (Boolean(i.overviewId) && Boolean(i.tabulationId)) || i.imgType === 0 || i.imgType === '0';
     const isOrientation = (i: any) => (Boolean(i.tabulationId) && !Boolean(i.overviewId)) || i.imgType === 1 || i.imgType === '1' || (!Boolean(i.overviewId) && !Boolean(i.tabulationId) && (i.imgType === undefined || i.imgType === null || i.imgType === ''));
     const isOrientation = (i: any) => (Boolean(i.tabulationId) && !Boolean(i.overviewId)) || i.imgType === 1 || i.imgType === '1' || (!Boolean(i.overviewId) && !Boolean(i.tabulationId) && (i.imgType === undefined || i.imgType === null || i.imgType === ''));
     planeFiles.value = drawList.filter((i: any) => isPlane(i));
     planeFiles.value = drawList.filter((i: any) => isPlane(i));
     orientationFiles.value = drawList.filter((i: any) => !isPlane(i) && isOrientation(i));
     orientationFiles.value = drawList.filter((i: any) => !isPlane(i) && isOrientation(i));
@@ -772,7 +772,6 @@ const selectInspection = async (file: any) => {
 };
 };
 // 勘验笔录:拉取并生成预览文本
 // 勘验笔录:拉取并生成预览文本
 const loadInspection = async (filesId?: number) => {
 const loadInspection = async (filesId?: number) => {
-  console.log('filesId', filesId);
   if (!filesId) return;
   if (!filesId) return;
   try {
   try {
     const res: any = await getCaseFileImageInfo(filesId);
     const res: any = await getCaseFileImageInfo(filesId);
@@ -832,6 +831,7 @@ const loadExtraction = async (filesId?: number) => {
   if (!filesId) return;
   if (!filesId) return;
   try {
   try {
     const res: any = await getCaseFileImageInfo(filesId);
     const res: any = await getCaseFileImageInfo(filesId);
+    console.log('extractDetail', res?.extractDetail)
     // 当按 filesId 查询时,接口返回对象即提取清单详情
     // 当按 filesId 查询时,接口返回对象即提取清单详情
     if (filesId) {
     if (filesId) {
       const detail = res?.extractDetail ?? {};
       const detail = res?.extractDetail ?? {};
@@ -978,7 +978,6 @@ const loadAlbum = async () => {
 
 
 // 统一下载:按当前 tab 类型以 blob 方式下载
 // 统一下载:按当前 tab 类型以 blob 方式下载
 const downloadSelected = async (item: any) => {
 const downloadSelected = async (item: any) => {
-  console.log(item, 55555)
   try {
   try {
     if (activeTab.value === 'inspection') {
     if (activeTab.value === 'inspection') {
       if (!caseId.value) return;
       if (!caseId.value) return;
@@ -1117,33 +1116,47 @@ watch(activeTab, (val) => {
 const openTabulation = (tabulationId?: string | number) => {
 const openTabulation = (tabulationId?: string | number) => {
   if (!caseId.value) return;
   if (!caseId.value) return;
   const extra = tabulationId ? `&tabulationId=${tabulationId}` : '';
   const extra = tabulationId ? `&tabulationId=${tabulationId}` : '';
-  if (appId === 'fire') {
-    window.open(`${url}/draw/fire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
-  } else if (appId === 'criminal') {
-    window.open(`${url}/draw/criminal/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
-  } else if (appId === 'cjzfire') {
-    window.open(`${url}/draw/cjzfire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
-  } else if (appId === 'xmfire') {
-    window.open(`${url}/draw/xmfire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
-  } else {
-    window.open(`${url}/draw/fire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
-  }
+  window.open(`${url}/draw/${appId || 'fire'}/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // if (appId === 'fire') {
+  //   window.open(`${url}/draw/fire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // } else if (appId === 'criminal') {
+  //   window.open(`${url}/draw/criminal/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // } else if (appId === 'cjzfire') {
+  //   window.open(`${url}/draw/cjzfire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // } else if (appId === 'xmfire') {
+  //   window.open(`${url}/draw/xmfire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // } else {
+  //   window.open(`${url}/draw/fire/index.html#/tabulation?caseId=${caseId.value!}&token=${user.value.token}${extra}`, '_blank');
+  // }
 };
 };
 
 
 // 新增平面图(overview)
 // 新增平面图(overview)
-const openOverView = () => {
+const openOverView = async () => {
+  const fusionList = (await getFusionAndSceneList({ caseId: caseId.value, type: 'scene' })) as unknown as any[];
+  let itme = fusionList.find((ele) => [0, 1, 3, 4, 6].includes(ele.sceneType));
+  console.log(fusionList, itme, 'openOverView')
   if (!caseId.value) return;
   if (!caseId.value) return;
-  if (appId === 'fire') {
-    window.open(`${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
-  } else if (appId === 'criminal') {
-    window.open(`${url}/draw/criminal/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
-  } else if (appId === 'cjzfire') {
-    window.open(`${url}/draw/cjzfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
-  } else if (appId === 'xmfire') {
-    window.open(`${url}/draw/xmfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
-  } else {
-    window.open(`${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  let openUrl = `${url}/draw/${appId || 'fire'}/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`
+  // if (appId === 'fire') {
+  //   openUrl = `${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`;
+  //   // window.open(`${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  // } else if (appId === 'criminal') {
+  //   openUrl = `${url}/draw/criminal/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`;
+  //   // window.open(`${url}/draw/criminal/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  // } else if (appId === 'cjzfire') {
+  //   openUrl = `${url}/draw/cjzfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`;
+  //   // window.open(`${url}/draw/cjzfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  // } else if (appId === 'xmfire') {
+  //   openUrl = `${url}/draw/xmfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`;
+  //   // window.open(`${url}/draw/xmfire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  // } else {
+  //   openUrl = `${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`;
+  //   // window.open(`${url}/draw/fire/index.html#/overview?caseId=${caseId.value!}&token=${user.value.token}`, '_blank');
+  // }
+  if(itme && itme.num){
+    openUrl += `&m=${itme.num}`
   }
   }
+  window.open(openUrl, '_blank');
 };
 };
 
 
 // 地图选择确认后,跳转创建方位图(tabulation)
 // 地图选择确认后,跳转创建方位图(tabulation)
@@ -1176,11 +1189,12 @@ const onUpload = async (_type: 'plane' | 'orientation') => {
 };
 };
 
 
 // 打开覆盖式编辑页(编辑当前项):勘验笔录/提取清单
 // 打开覆盖式编辑页(编辑当前项):勘验笔录/提取清单
-const openEditOverlay = (type: 'inquest' | 'extraction') => {
+const openEditOverlay = (type: 'inquest' | 'extraction', item) => {
   const current = router.currentRoute.value;
   const current = router.currentRoute.value;
   // 勘验笔录仍走原有 records 编辑页;提取清单改为新的 editInspection 页
   // 勘验笔录仍走原有 records 编辑页;提取清单改为新的 editInspection 页
   const editSub = type === 'extraction' ? 'editInspection' : 'records';
   const editSub = type === 'extraction' ? 'editInspection' : 'records';
-  const query: any = { ...current.query, editSub, type };
+  const query: any = { ...current.query, editSub, type, filesId: item.id || '' };
+  console.log(item, 'openEditOverlay')
   if (type === 'extraction') {
   if (type === 'extraction') {
     // 使用 sessionStorage 传递预填数据,避免 URL 过长
     // 使用 sessionStorage 传递预填数据,避免 URL 过长
     try {
     try {
@@ -1238,8 +1252,8 @@ const onUploadInspection = async () => {
   await loadListsFromTree();
   await loadListsFromTree();
 };
 };
 const onFillExtraction = () => openAddOverlay('extraction');
 const onFillExtraction = () => openAddOverlay('extraction');
-const onEditInspection = () => openEditOverlay('inquest');
-const onEditExtraction = () => openEditOverlay('extraction');
+const onEditInspection = (item) => openEditOverlay('inquest', item);
+const onEditExtraction = (item) => openEditOverlay('extraction', item);
 const onUploadExtraction = async () => {
 const onUploadExtraction = async () => {
   if (!caseId.value) return;
   if (!caseId.value) return;
   await addCaseFileDialog({ caseId: caseId.value!, fileType: 4 });
   await addCaseFileDialog({ caseId: caseId.value!, fileType: 4 });

+ 8 - 8
src/view/newFireCase/newFireDetails/editInspection.vue

@@ -77,6 +77,7 @@ import { reactive, watch, computed } from 'vue';
 import { useRoute } from 'vue-router';
 import { useRoute } from 'vue-router';
 import { ElMessage } from 'element-plus';
 import { ElMessage } from 'element-plus';
 import { getCaseDetailInfo, saveCaseDetailInfo } from '@/store/case';
 import { getCaseDetailInfo, saveCaseDetailInfo } from '@/store/case';
+import { getCaseFileImageInfo } from '@/store/editCsae';
 
 
 const props = defineProps<{ caseId: number; currentRecord: object; editOrShow: string }>();
 const props = defineProps<{ caseId: number; currentRecord: object; editOrShow: string }>();
 const route = useRoute();
 const route = useRoute();
@@ -142,18 +143,17 @@ const initInfo = async () => {
       }
       }
     }
     }
     // 读取预填数据(如有)
     // 读取预填数据(如有)
-    const presetKey = route.query.presetKey as string | undefined;
-    if (presetKey) {
+    const filesId = route.query.filesId as string;
+    if (filesId) {
+      const res: any = await getCaseFileImageInfo(filesId);
+      const detail = res?.extractDetail ?? {};
+      console.log('getCaseFileImageInfo', detail, res);
       try {
       try {
-        const txt = sessionStorage.getItem('extractionPreset:' + presetKey);
-        if (txt) {
-          const preset = JSON.parse(txt);
-          for (const k in preset) {
+          for (const k in detail) {
             if (Object.prototype.hasOwnProperty.call(data, k)) {
             if (Object.prototype.hasOwnProperty.call(data, k)) {
-              (data as any)[k] = preset[k];
+              (data as any)[k] = detail[k];
             }
             }
           }
           }
-        }
       } catch (e) {
       } catch (e) {
         console.warn('读取预填数据失败', e);
         console.warn('读取预填数据失败', e);
       }
       }

+ 35 - 0
src/view/newFireCase/newFireDetails/index.vue

@@ -319,6 +319,41 @@ const saveEditSub = async () => {
   }
   }
 }
 }
 
 
+// 打开覆盖式编辑页(编辑当前项):勘验笔录/提取清单
+const openEditOverlay = () => {
+  const type = route.query.type as string | undefined; 
+  const current = router.currentRoute.value;
+  // 勘验笔录仍走原有 records 编辑页;提取清单改为新的 editInspection 页
+  const editSub = type === 'extraction' ? 'editInspection' : 'records';
+  const query: any = { ...current.query, editSub, type };
+  if (type === 'extraction') {
+    // 使用 sessionStorage 传递预填数据,避免 URL 过长
+    try {
+      const key = `extractionPreset:${caseId.value!}`;
+      const currentItem = extractionData.value || {};
+      sessionStorage.setItem(key, JSON.stringify(currentItem));
+      query.presetKey = String(caseId.value!);
+      if (currentItem && currentItem.id !== undefined) {
+        query.id = String(currentItem.id);
+      }
+    } catch (e) {
+      console.warn('保存预填数据失败', e);
+    }
+  } else if (type === 'inquest') {
+    // 勘验笔录:传递当前选中项内容与ID,用于编辑页预填与更新
+    try {
+      const key = `inquestPreset:${caseId.value!}`;
+      const currentItem = inquestData.value || {};
+      sessionStorage.setItem(key, JSON.stringify(currentItem));
+      query.presetKey = String(caseId.value!);
+      if (currentItem && currentItem.id !== undefined) {
+        query.id = String(currentItem.id);
+      }
+    } catch (e) {
+      console.warn('保存勘验预填数据失败', e);
+    }
+  }
+};
 const exportEditSub = async () => {
 const exportEditSub = async () => {
   const currentType = route.query.type as string | undefined;
   const currentType = route.query.type as string | undefined;
   if (currentType !== 'extraction' && currentType !== 'inquest') {
   if (currentType !== 'extraction' && currentType !== 'inquest') {

+ 1 - 0
src/view/organization/index.vue

@@ -105,6 +105,7 @@ const delHandler = async (deptId: Organization["id"]) => {
 
 
 const refresh = async () => {
 const refresh = async () => {
   organTrees.value = await getOrganizationTree("1");
   organTrees.value = await getOrganizationTree("1");
+  if(filterText.value) handleReset()
 };
 };
 
 
 interface Tree {
 interface Tree {