Explorar o código

fix:解决BasicEntry冲突

chauncey hai 1 ano
pai
achega
f17886039f

+ 9 - 2
src/api/scene/scene.ts

@@ -22,13 +22,20 @@ export const getLayoutApi = (param: { workshopId: string; viewType: ViewType })
   });
 };
 
-/** 查询车间小地图布局 */
-export const getWorkshopMiniMapLayoutApi = (workshopId: number) => {
+/** 查询车间小地图布局--PC */
+export const getWorkshopMiniMapLayoutPCApi = (workshopId: number) => {
   return http.request<SceneTypes.LayoutResp>({
     url: `/layout/getPcWorkshopLayout?workshopId=${workshopId}`,
     method: 'get',
   });
 };
+/** 查询车间小地图布局--Mobile */
+export const getWorkshopMiniMapLayoutMobileApi = (workshopId: number) => {
+  return http.request<SceneTypes.LayoutResp>({
+    url: `/layout/getMobileWorkshopLayout?workshopId=${workshopId}`,
+    method: 'get',
+  });
+};
 
 /** 更新-新增小地图页面布局 */
 export const updateLayoutApi = (data: SceneTypes.UpdateViewLayoutParam) => {

+ 46 - 49
src/layout/components/Header/SwitchTenant.vue

@@ -2,63 +2,60 @@
 <template>
   <div class="switchTenantLable-wrapper" v-if="options.length > 0">
     <div class="switchTenantLable">选择租户</div>
-    <el-tree-select
-      v-model="currentTenant"
-      :data="options"
-      check-strictly
-      placeholder="请选择租户"
-      @update:modelValue="handleChange"
-    />
+    <el-tree-select v-model="currentTenant" :data="options" check-strictly placeholder="请选择租户"
+      @update:modelValue="handleChange" />
   </div>
 </template>
 <script lang="ts" setup>
-  import { ref, computed, onMounted } from 'vue';
-  import { useUserStore } from '@/store/modules/user';
-  import { queryListTenant} from '@/api/tenant';
-  import { useTargetTenantIdSetting } from '@/utils/useTargetTenantIdSetting';
-  import { replaceParams } from '@/utils/helper/treeHelper';
-  
-  interface TenantOption {
-    label: string;
-    value: string;
-  }
+import { ref, computed, onMounted } from 'vue';
+import { useUserStore } from '@/store/modules/user';
+import { queryListTenant } from '@/api/tenant';
+import { useTargetTenantIdSetting } from '@/utils/useTargetTenantIdSetting';
+import { replaceParams } from '@/utils/helper/treeHelper';
 
-  const userStore = useUserStore();
-  const { setValue, getValue } = useTargetTenantIdSetting();
-  const localTId = getValue();
-  const tenantId = computed(() => {
-    return userStore.info.tenantId;
-  });
-  const currentTenant = ref(localTId ? Number(localTId) : Number(tenantId.value));
-  const options = ref<TenantOption[]>([]);
+interface TenantOption {
+  label: string;
+  value: string;
+}
+
+const userStore = useUserStore();
+const { setValue, getValue } = useTargetTenantIdSetting();
+const localTId = getValue();
+const tenantId = computed(() => {
+  return userStore.info.tenantId;
+});
+const currentTenant = ref(localTId ? Number(localTId) : Number(tenantId.value));
+const options = ref<TenantOption[]>([]);
 
-  onMounted(() => {
-    queryListTenant().then((res) => {
-      if (!res) return;
-      options.value = replaceParams(res || [], 'tenantName', 'id')
-    });
+onMounted(() => {
+  queryListTenant().then((res) => {
+    if (!res) return;
+    options.value = replaceParams(res || [], 'tenantName', 'id')
   });
+});
 
-  const handleChange = (targetTenantId: string) => {
-    setValue(targetTenantId);
-    currentTenant.value = Number(targetTenantId) ;
-    window.location.reload();
-  };
+const handleChange = (targetTenantId: string) => {
+  setValue(targetTenantId);
+  currentTenant.value = Number(targetTenantId);
+  window.location.reload();
+  sessionStorage.removeItem('selectCompanyId'); //切换租户的时候,下拉公司列表清空
+};
 </script>
 <style scoped>
-  .switchTenantLable {
-    margin-right: 15px;
-    display: inline-block;
-    width: 100px;
-  }
-  .switchTenantWrapper {
-    margin-right: 20px;
-  }
+.switchTenantLable {
+  margin-right: 15px;
+  display: inline-block;
+  width: 100px;
+}
+
+.switchTenantWrapper {
+  margin-right: 20px;
+}
 
-  .switchTenantLable-wrapper {
-    display: flex;
-    align-items: center;
-    justify-content: center;
-    width: 200px;
-  }
+.switchTenantLable-wrapper {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  width: 200px;
+}
 </style>

+ 67 - 74
src/views/map-config/mini-map/MapBase/KonvaMap.vue

@@ -1,5 +1,5 @@
 <template>
-  <div>
+  <div class="konva-map" ref="konvaMapRef">
     <v-stage ref="stageAll" :config="stageConfig" @click="handleStageClick">
       <v-layer ref="layer">
         <v-image :config="bgConfig" v-show="bgImgUrl" />
@@ -16,18 +16,19 @@
       :style="{ position: 'absolute', left: posX + 'px', top: posY + 'px' }">
       <div class="opt-item" :class="{ disabled: disabledSet }" @click="setDefaultCamera">设为默认相机</div>
       <div class="opt-item" @click="previewCamera">预览相机</div>
+      <div class="opt-item" @click="handleDeleteLabel">删除标签</div>
     </div>
 
     <CameraPreview v-if="isShow" :last-pos-x="posX!" :last-pos-y="posY!" :video-url="videoUrl" @close="closePreview" />
 
-    <DefaultTip v-show="tipShow" :position="pos"
+    <DefaultTip v-show="selectCameraId" :position="pos" :is-default="isDefaultCamera" :camera-info="cameraInfo"
       :style="{ position: 'absolute', left: posTipX + 'px', top: posTipY + 'px' }" />
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref, onMounted, onBeforeUnmount, watch } from 'vue';
-import { ElMessage, ElMessageBox } from 'element-plus';
+import { ref, onMounted, watch } from 'vue';
+import { ElMessage } from 'element-plus';
 import DefaultTip from '../components/DefaultTip.vue';
 import cameraImgSrc from '@/assets/camera/cameraImg.png';
 import favoritesImgSrc from '@/assets/camera/favorites.png';
@@ -38,6 +39,7 @@ import { cloneDeep } from 'lodash-es';
 import { updateMinMapViewLayoutApi } from '@/api/scene/scene';
 import CameraPreview from './CameraPreview.vue';
 import { ShopMapCamera } from '@/types/scene/type'
+import { openMessageBox } from '@/views/system-config/business-scene/components/MessageBox';
 
 // const miniMap = useMiniMap();
 // const { shopCameraList } = storeToRefs(miniMap);
@@ -67,10 +69,11 @@ const lastClickedGroupId = ref<string | null>(null);
 const lastClickedVideoUrl = ref<string | null>(null);
 
 const bgImgUrl = ref<string | null>('');
+const cameraInfo = ref<camerasGroupType>();
 const cameras = ref<camerasGroupType[]>([]);
 //默认相机id
 const defaultCameraId = ref('');
-const tipShow = ref(false);
+const isDefaultCamera = ref(false);
 const disabledSet = ref(false);
 const videoUrl = ref<string>('');
 
@@ -124,7 +127,8 @@ const defaultIconConfig = ref({
   id: 'defaultIcon',
   image: favoritesImg,
 });
-
+//选中相机的id
+const selectCameraId = ref();
 //取消
 const handleMouseOver = (e) => {
   document.oncontextmenu = () => {
@@ -132,32 +136,37 @@ const handleMouseOver = (e) => {
   };
 
   const group = e.target.parent;
-  if (group.id() === defaultCameraId.value) {
-    tipShow.value = true;
-    const stage = transformer.value.getNode().getStage();
-    const defaultNode = stage.findOne('#defaultIcon');
-    const tipPosition = defaultNode.absolutePosition();
-    posTipX.value = Number(tipPosition?.x.toFixed(2)) || 0;
-    posTipY.value = Number(tipPosition?.y.toFixed(2)) || 0;
-    const angle = group.rotation() >= 0 ? group.rotation() : group.rotation() + 360;
-    if (angle >= 30) {
-      if (angle <= 150) {
-        pos.value = TipPositionEnum.RIGHT;
-        posTipX.value += 26;
-        posTipY.value -= 17;
-      } else if (angle <= 210) {
-        pos.value = TipPositionEnum.BOTTOM;
-        posTipY.value += 26;
-        posTipX.value -= 50;
-      } else {
-        pos.value = TipPositionEnum.LEFT;
-        posTipX.value -= 121;
-        posTipY.value -= 25;
-      }
+  selectCameraId.value = group.id();
+  cameraInfo.value = cameras.value.find((camera) => camera.id === selectCameraId.value)
+  let defaultNode;
+  const stage = transformer.value.getNode().getStage();
+  if (selectCameraId.value === defaultCameraId.value) {
+    isDefaultCamera.value = true;
+    defaultNode = stage.findOne('#defaultIcon');
+  } else {
+    defaultNode = stage.findOne(`#${selectCameraId.value}`);
+  }
+  const tipPosition = defaultNode.absolutePosition();
+  posTipX.value = Number(tipPosition?.x.toFixed(2)) || 0;
+  posTipY.value = Number(tipPosition?.y.toFixed(2)) || 0;
+  const angle = group.rotation() >= 0 ? group.rotation() : group.rotation() + 360;
+  if (angle >= 30) {
+    if (angle <= 150) {
+      pos.value = TipPositionEnum.RIGHT;
+      posTipX.value += 26;
+      posTipY.value -= 17;
+    } else if (angle <= 210) {
+      pos.value = TipPositionEnum.BOTTOM;
+      posTipY.value += 26;
+      posTipX.value -= 50;
     } else {
-      posTipY.value -= 61;
-      posTipX.value -= 43;
+      pos.value = TipPositionEnum.LEFT;
+      posTipX.value -= 121;
+      posTipY.value -= 25;
     }
+  } else {
+    posTipY.value -= 80;
+    posTipX.value -= 43;
   }
 };
 // 还原浏览器默认鼠标事件
@@ -165,11 +174,12 @@ const handleMouseLeave = () => {
   document.oncontextmenu = () => {
     return true;
   };
-  tipShow.value = false;
+  isDefaultCamera.value = false;
+  selectCameraId.value = null;
 };
 
 const handleDragStart = () => {
-  tipShow.value = false;
+  isDefaultCamera.value = false;
   emit('change', true);
 };
 
@@ -213,7 +223,7 @@ const handleStageClick = (e: any) => {
 };
 
 const handleCameraClick = (camera) => {
-  tipShow.value = false;
+  isDefaultCamera.value = false;
   const transformerNode = transformer.value.getNode();
   const stage = transformerNode.getStage();
   const cameraNode = stage.findOne('#' + camera.id);
@@ -353,7 +363,6 @@ const saveLayout = () => {
     item.groupConfig.rotation = groups[index].attrs.rotation || 0;
     item.groupConfig.scaleX = groups[index].attrs.scaleX || 1;
     item.groupConfig.scaleY = groups[index].attrs.scaleY || 1;
-    // item.config.url = cameraImgSrc;
     return item;
   });
   const layout = {
@@ -366,42 +375,31 @@ const saveLayout = () => {
   emit('change', false);
   return JSON.stringify(layout);
 };
-
-//删除相机
-const handleKeyDown = (e) => {
-  if (e.keyCode === 46 || e.code === 'Delete' || e.keyCode === 8 || e.code === 'Backspace') {
-    if (lastClickedGroupId.value === defaultCameraId.value) {
-      // ElMessage.error({
-      //   message: '无法删除默认相机',
-      // });
-      // return;
-      ElMessageBox.confirm('此相机为默认相机,您确认要删除此相机?', 'Warning', {
-        confirmButtonText: '确认',
-        cancelButtonText: '取消',
-        type: 'warning',
-      })
-        .then(() => {
-          const index = cameras.value.findIndex((item) => item.id === lastClickedGroupId.value);
-          index >= 0 && cameras.value.splice(index, 1);
-          lastClickedGroupId.value = '';
-
-          //取消transformer
-          const transformerNode = transformer.value.getNode();
-          transformerNode.nodes([]);
-        })
-        .catch(() => { });
-    } else {
-      const index = cameras.value.findIndex((item) => item.id === lastClickedGroupId.value);
-      index >= 0 && cameras.value.splice(index, 1);
-      lastClickedGroupId.value = '';
-
-      //取消transformer
-      const transformerNode = transformer.value.getNode();
-      transformerNode.nodes([]);
-    }
-    emit('change', true);
+const deleteLabelFn = () => {
+  const index = cameras.value.findIndex((item) => item.id === lastClickedGroupId.value);
+  index >= 0 && cameras.value.splice(index, 1);
+  lastClickedGroupId.value = '';
+  //取消transformer
+  const transformerNode = transformer.value.getNode();
+  transformerNode.nodes([]);
+  if (!defaultShow.value) return;
+  defaultShow.value = false;
+}
+const handleDeleteLabel = () => {
+  if (lastClickedGroupId.value === defaultCameraId.value) {
+    openMessageBox('警告', '此相机为默认相机,您确认要删除此相机?', deleteLabelFn)
+  } else {
+    deleteLabelFn();
+    ElMessage.success('删除成功!')
   }
-};
+  emit('change', true);
+}
+//删除相机
+// const handleKeyDown = (e) => {
+//   if (e.keyCode === 46 || e.code === 'Delete' || e.keyCode === 8 || e.code === 'Backspace') {
+//     handleDeleteLabel();
+//   }
+// };
 
 //重置
 const resetMap = () => {
@@ -471,11 +469,6 @@ defineExpose({
 });
 onMounted(() => {
   camImg.src = cameraImgSrc;
-  window.addEventListener('keydown', handleKeyDown);
-});
-
-onBeforeUnmount(() => {
-  window.removeEventListener('keydown', handleKeyDown);
 });
 </script>
 

+ 50 - 59
src/views/map-config/mini-map/MiniMapConfig.vue

@@ -5,37 +5,19 @@
         <img :src="rollback" />
         <span>返回</span>
       </div>
-      <!-- <el-icon size="20">
-        <ArrowLeft />
-      </el-icon> -->
       <div class="head-opt flex-1 flex justify-between items-center">
-        <div class="workshop-name">{{ selectedName }}
-          <!-- <span>场景:</span>
-          <el-tree-select v-model="selectedShopCode" :data="scenesTree" accordion :render-after-expand="false"
-            :default-expand-all="true" :teleported="false" placeholder="请选择相关场景" @change="changeShop"
-            style="width: 200px" /> -->
-        </div>
-        <div v-if="shopCameraList.length === 1" class="upload-option">
-          <el-tooltip class="box-item" effect="dark" content="选择'是'则表示需要上传背景图片;选择'否'则表示无需上传背景图片,直接点击保存为布局即可"
-            placement="top">
-            <div class="upload-title">上传背景图片</div>
-          </el-tooltip>
-          <div class="my-2 flex items-center text-sm">
-            <el-radio-group v-model="isUploadBg" @change="changeUploadBg" class="ml-4">
-              <el-radio :label="true">是</el-radio>
-              <el-radio :label="false">否</el-radio>
-            </el-radio-group>
-          </div>
-        </div>
+        <div class="workshop-name">{{ selectedName }}</div>
         <div class="flex">
           <el-upload class="avatar-uploader flex justify-center items-center" :action="actionUrl"
             :show-file-list="false" :on-success="handleAvatarSuccess" :with-credentials="true" name="file"
             :headers="getHeaders()">
             <el-button :icon="Refresh" :disabled="!hasBg"> 替换照片 </el-button>
           </el-upload>
-
-          <el-button @click="handleSave" style="margin-left: 40px" type="primary"
-            :disabled="!isSave && isUploadBg">保存为布局
+          <el-button :icon="Refresh" @click="openMessageBox('提示', '是否重置当前设置', refreshUploadBg, '重置成功!')"
+            style="margin-left: 40px" :disabled="!hasBg">
+            重置布局
+          </el-button>
+          <el-button @click="handleSave" style="margin-left: 40px" type="primary">保存为布局
           </el-button>
         </div>
       </div>
@@ -87,9 +69,9 @@
 // import { storeToRefs } from 'pinia';
 import { ElMessage, ElInput, ElMessageBox } from 'element-plus';
 import { onMounted, onUnmounted, ref } from 'vue';
-import { updateMinMapViewLayoutApi, getCamerasByWorkShopId, getWorkshopMiniMapLayoutApi } from '@/api/scene/scene';
+import { updateMinMapViewLayoutApi, getCamerasByWorkShopId, getWorkshopMiniMapLayoutPCApi, getWorkshopMiniMapLayoutMobileApi } from '@/api/scene/scene';
 import { computed } from 'vue';
-import { Search, Refresh, ArrowLeft } from '@element-plus/icons-vue';
+import { Search, Refresh } from '@element-plus/icons-vue';
 import KonvaMap from './MapBase/KonvaMap.vue';
 import useCameraStatus from '@/views/cameras/preview/store/useCameraStatus';
 import { onBeforeRouteLeave, useRoute } from 'vue-router';
@@ -99,8 +81,10 @@ import { getHeaders } from '@/utils/http/axios';
 import rollback from '@/assets/rollback.png'
 import router from '@/router';
 import { ShopMapCamera } from '@/types/scene/type'
+import { ViewType } from '@/types/page-config/type';
 const cameraStatus = useCameraStatus();
 const { openIntervalNew, closeInterval } = cameraStatus;
+import { openMessageBox } from '@/views/system-config/business-scene/components/MessageBox'
 
 // const miniMap = useMiniMap();
 // const { scenesTree, selectedShopCode, selectedShopDetail } = storeToRefs(miniMap);
@@ -120,7 +104,7 @@ const searchKey = ref('');
 const hasBg = ref(false);
 
 //是否能够保存
-const isSave = computed(() => selectedShopId.value && hasBg.value);
+//const isSave = computed(() => selectedShopId.value && hasBg.value);
 
 //是否修改
 const isChange = ref<boolean>(false);
@@ -146,11 +130,9 @@ function updataState(data, updateData) {
   }
 }
 
-const changeUploadBg = () => {
-  if (isUploadBg.value && !isMap.value) {
-    konvaMap.value.resetMap();
-    hasBg.value = false;
-  }
+const refreshUploadBg = () => {
+  konvaMap.value.resetMap();
+  hasBg.value = false;
 };
 
 const handleBeforeUpload = () => {
@@ -188,8 +170,13 @@ const handleAvatarSuccess = (e) => {
 //   getShopContent(code);
 //   hasBg.value = false;
 // };
+const getMapLayoutAPIMap = {
+  [ViewType.minimap_PC]: getWorkshopMiniMapLayoutPCApi,
+  [ViewType.minimap_phone]: getWorkshopMiniMapLayoutMobileApi,
+}
 const getMapLayout = async (id: number) => {
-  const res = await getWorkshopMiniMapLayoutApi(id);
+  const api = getMapLayoutAPIMap[viewType.value];
+  const res = await api(id);
   if (!res) return;
   const layoutJSON = JSON.parse(res.layout);
   return layoutJSON;
@@ -276,7 +263,7 @@ const handleAddCamera = (cameraId: string) => {
   }
   if (!hasBg.value) {
     ElMessage.warning({
-      message: '请先添加背景图片',
+      message: '请先添加车间地图',
     });
     return;
   }
@@ -284,32 +271,36 @@ const handleAddCamera = (cameraId: string) => {
 };
 
 const handleSave = () => {
-  if (shopCameraList.value.length === 1 && !isUploadBg.value) {
-    isMap.value = false;
-    const layout = JSON.stringify({
-      isUploadBg: isUploadBg.value,
-      defaultCameraId: shopCameraList.value[0].code,
-    });
-    updateMinMapViewLayoutApi({
-      layout,
-      targetId: String(selectedShopId.value),
-      viewType: viewType.value,
-    }).then((res) => {
-      console.log('updateMinMapViewLayoutApi', res);
-      ElMessage.success('保存成功');
-    });
-  } else {
-    isMap.value = true;
-    const layout = konvaMap.value.saveLayout();
-    updateMinMapViewLayoutApi({
-      layout: JSON.stringify({ ...JSON.parse(layout), isUploadBg: true }),
-      targetId: String(selectedShopId.value),
-      viewType: viewType.value,
-    }).then((res) => {
-      console.log('updateMinMapViewLayoutApi', res);
-      ElMessage.success('保存成功');
-    });
+  // if (shopCameraList.value.length === 1 && !isUploadBg.value) {
+  //   isMap.value = false;
+  //   const layout = JSON.stringify({
+  //     isUploadBg: isUploadBg.value,
+  //     defaultCameraId: shopCameraList.value[0].code,
+  //   });
+  //   console.log(layout)
+  //   updateMinMapViewLayoutApi({
+  //     layout,
+  //     targetId: String(selectedShopId.value),
+  //     viewType: viewType.value,
+  //   }).then(() => {
+  //     ElMessage.success('保存成功');
+  //   });
+  // } else {
+  isMap.value = true;
+  const layout = konvaMap.value.saveLayout();
+  const cameraList = JSON.parse(layout).cameraList;
+  if (cameraList.length === 0) {
+    ElMessage.error('请至少添加1个相机标签后发布');
+    return;
   }
+  updateMinMapViewLayoutApi({
+    layout: JSON.stringify({ ...JSON.parse(layout), isUploadBg: true }),
+    targetId: String(selectedShopId.value),
+    viewType: viewType.value,
+  }).then(() => {
+    ElMessage.success('保存成功');
+  });
+  // }
 };
 
 const changeMap = (val) => {

+ 63 - 46
src/views/map-config/mini-map/components/DefaultTip.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="tip-content">
-    <span>默认摄像头</span>
+    <span v-show="isDefault">默认摄像头</span>
+    <span>{{ positionText }}</span>
+    <span>{{ sizeText }}</span>
     <div v-if="props.position === TipPositionEnum.TOP" class="tip-narrow bottom"></div>
     <div v-else-if="props.position === TipPositionEnum.BOTTOM" class="tip-narrow top"></div>
     <div v-else-if="props.position === TipPositionEnum.RIGHT" class="tip-narrow left"></div>
@@ -9,59 +11,74 @@
 </template>
 
 <script setup lang="ts">
-  import { TipPositionEnum } from '../type';
+import { computed } from 'vue';
+import { TipPositionEnum, camerasGroupType } from '../type';
 
-  const props = withDefaults(defineProps<{ position: TipPositionEnum }>(), {
-    position: TipPositionEnum.TOP,
-  });
+const props = withDefaults(defineProps<{ position: TipPositionEnum; isDefault: boolean, cameraInfo: camerasGroupType | undefined }>(), {
+  position: TipPositionEnum.TOP,
+});
+const positionText = computed(() => {
+  const cameraInfo = props.cameraInfo;
+  if (!cameraInfo) return ''
+  const x = cameraInfo.groupConfig.x?.toFixed(2);
+  const y = cameraInfo.groupConfig.y?.toFixed(2);
+  return `位置:(x:${x},y:${y})`
+})
+const sizeText = computed(() => {
+  const cameraInfo = props.cameraInfo;
+  if (!cameraInfo) return ''
+  const w = Math.round(cameraInfo.config.width! * cameraInfo.groupConfig.scaleX!)
+  const h = Math.round(cameraInfo.config.height! * cameraInfo.groupConfig.scaleY!)
+  return `大小:(w:${w},h:${h})`
+})
 </script>
 
 <style scoped lang="scss">
-  .tip-content {
-    position: relative;
-    width: 86px;
-    height: 35px;
-    background-color: #3c3c3d;
-    border-radius: 8px;
-    display: flex;
-    justify-content: center;
-    align-items: center;
-    font-size: 14px;
-    font-weight: 400;
-    color: #ffffff;
-    margin: 5px;
-  }
+.tip-content {
+  position: relative;
+  padding: 5px;
+  background-color: #3c3c3d;
+  border-radius: 8px;
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+  align-items: center;
+  font-size: 14px;
+  font-weight: 400;
+  color: #ffffff;
+  margin: 5px;
+}
 
-  .tip-narrow {
-    position: absolute;
-    border: 5px solid transparent;
+.tip-narrow {
+  position: absolute;
+  border: 5px solid transparent;
 
-    &.bottom {
-      top: 100%;
-      left: 50%;
-      border-top-color: #3c3c3d;
-      transform: translateX(-50%);
-    }
+  &.bottom {
+    top: 100%;
+    left: 50%;
+    border-top-color: #3c3c3d;
+    transform: translateX(-50%);
+  }
 
-    &.top {
-      top: 0%;
-      left: 50%;
-      border-bottom-color: #3c3c3d;
-      transform: translate(-50%, -100%);
-    }
+  &.top {
+    top: 0%;
+    left: 50%;
+    border-bottom-color: #3c3c3d;
+    transform: translate(-50%, -100%);
+  }
 
-    &.left {
-      top: 50%;
-      left: 0%;
-      border-right-color: #3c3c3d;
-      transform: translate(-100%, -50%);
-    }
+  &.left {
+    top: 50%;
+    left: 0%;
+    border-right-color: #3c3c3d;
+    transform: translate(-100%, -50%);
+  }
 
-    &.right {
-      top: 50%;
-      right: 0%;
-      border-left-color: #3c3c3d;
-      transform: translate(100%, -50%);
-    }
+  &.right {
+    top: 50%;
+    right: 0%;
+    border-left-color: #3c3c3d;
+    transform: translate(100%, -50%);
   }
+}
 </style>

+ 2 - 2
src/views/map-config/mini-map/use-mini-map.ts

@@ -1,6 +1,6 @@
 import { computed, ref, toRefs } from 'vue';
 import useSceneInfos from '@/hooks/useSceneInfos';
-import { getCamerasByWorkShopId, getWorkshopMiniMapLayoutApi } from '@/api/scene/scene';
+import { getCamerasByWorkShopId, getWorkshopMiniMapLayoutPCApi } from '@/api/scene/scene';
 import { CameraItem } from '@/types/scene/type.ts';
 import { defineStore } from 'pinia';
 import safeParse from '@/utils/safeParse';
@@ -56,7 +56,7 @@ export const useMiniMap = defineStore('mini-map', () => {
   //     ElMessage.error('摄像头code未找到对应信息');
   //     return Promise.reject();
   //   }
-  //   return getWorkshopMiniMapLayoutApi(shopId).then((res) => {
+  //   return getWorkshopMiniMapLayoutPCApi(shopId).then((res) => {
   //     const layoutJSON = res?.layout ? safeParse(res.layout) : null;
   //     return layoutJSON;
   //   });

+ 12 - 2
src/views/page-config/component/BasicLayoutEntry.vue

@@ -7,7 +7,12 @@
         </section>
         <section class="card__right">
           <span class="span__card--title"> PC端{{ titleDefault }} </span>
+<<<<<<< HEAD
           <span class="span__card--describe"> {{ describeDefault }}PC端平台首页 </span>
+=======
+          <span class="span__card--describe"> {{ describeDefault }}PC端平台{{ props.layoutType === LayoutConfigType.scene
+            ? '生效' : '首页' }} </span>
+>>>>>>> 23bcffa (完成相机布局配置)
         </section>
       </div>
       <div class="card--default" @click="toLayout('Phone')">
@@ -16,7 +21,12 @@
         </section>
         <section class="card__right">
           <span class="span__card--title"> 手机端{{ titleDefault }} </span>
+<<<<<<< HEAD
           <span class="span__card--describe"> {{ describeDefault }}手机端平台首页 </span>
+=======
+          <span class="span__card--describe"> {{ describeDefault }}手机端平台{{ props.layoutType === LayoutConfigType.scene
+            ? '生效' : '首页' }} </span>
+>>>>>>> 23bcffa (完成相机布局配置)
         </section>
       </div>
     </main>
@@ -40,8 +50,8 @@ const generateContentDefault = (layoutType: LayoutConfigType.scene | LayoutConfi
       describeDefault.value = '编辑车间在业务场景中的布局,展示在';
       break;
     case LayoutConfigType.camera:
-      titleDefault.value = '车间布局';
-      describeDefault.value = '编辑的车间布局、 \n摄像头位置等在\n'
+      titleDefault.value = '相机布局';
+      describeDefault.value = '配置车间在业务场景\n中的布局,展示在\n'
       break;
   }
 }

+ 3 - 7
src/views/page-config/component/BasicLayoutList.vue

@@ -15,17 +15,13 @@
         <el-card v-for="layout in layoutList" :key="layout.id" shadow="hover" class="layout-cards">
           <div class="layout-card" @click="handleClickCompany(layout.id, layout.name)">
             <div v-if="layout.layout">
-              <MapContainerSmall
-                ref="mapContainerRef"
-                :bg-image-url="layout.layout"
-                :show-shops="layout.shopList"
-                class="content-pic"
-              />
+              <MapContainerSmall ref="mapContainerRef" :bg-image-url="layout.layout" :show-shops="layout.shopList"
+                class="content-pic" />
             </div>
 
             <div v-else>
               <img :src="noLayout" />
-              <span>请添加场景布局</span>
+              <span>{{ props.layoutType === LayoutConfigType.scene ? '请添加场景布局' : '请添加相机布局' }}</span>
             </div>
           </div>
           <template #footer>

+ 4 - 2
src/views/system-config/business-scene/components/MessageBox.ts

@@ -10,6 +10,7 @@ export const openMessageBox = (
   title?: string | undefined,
   message?: string | undefined,
   fn?: () => void,
+  elMessage?: string | undefined,
 ) => {
   ElMessageBox.confirm(
     message ? message : '请确认是否删除该数据?',
@@ -21,13 +22,14 @@ export const openMessageBox = (
     },
   )
     .then(async () => {
+      const message = elMessage ? elMessage : '删除成功!';
       if (!fn) {
-        getMessage('success', '删除成功');
+        getMessage('success', message);
         return;
       } else {
         try {
           await fn();
-          getMessage('success', '删除成功');
+          getMessage('success', message);
         } catch {}
       }
     })