浏览代码

修改需求

bill 2 年之前
父节点
当前提交
6564d094b6

+ 0 - 1
src/App.vue

@@ -11,6 +11,5 @@
 import Locale from "@/config/locale.vue";
 import { appConstant } from "@/app";
 
-console.log(appConstant);
 document.title = appConstant.title;
 </script>

+ 1 - 1
src/app/criminal/routeConfig.ts

@@ -7,7 +7,7 @@ export const CriminalRouteName = {
 } as const;
 
 export const menuRouteNames = [
-  CriminalRouteName.home,
+  // CriminalRouteName.home,
   CriminalRouteName.vrmodel,
   CriminalRouteName.camera,
   CriminalRouteName.example,

+ 1 - 1
src/app/fire/routeConfig.ts

@@ -8,7 +8,7 @@ export const FireRouteName = {
 } as const;
 
 export const menuRouteNames = [
-  FireRouteName.home,
+  // FireRouteName.home,
   FireRouteName.vrmodel,
   FireRouteName.camera,
   FireRouteName.dispatch,

+ 0 - 12
src/app/fire/store/fire.ts

@@ -4,9 +4,7 @@ import {
   PaggingRes,
   axios,
   fireDetail,
-  fireSetPsw,
   getFireList,
-  getFirePsw,
   getMessageList,
   insertFire,
   insertMessage,
@@ -67,16 +65,6 @@ export const delFire = (fire: Fire) => setFire({ ...fire, isDelete: 1 });
 export const getFire = async (projectId: string) =>
   (await axios.get<Fire>(fireDetail, { params: { type: 0, projectId } })).data;
 
-export const setFireSharePWD = (params: {
-  projectId: string;
-  randCode: string;
-}) => axios.post(fireSetPsw, params);
-
-export const getFireSharePWD = async (params: {
-  projectId: string;
-  roteUrl: string;
-}) => (await axios.get<{ randCode: string }>(getFirePsw, { params })).data;
-
 export const revokeFireTeachs = (ids: string[]) =>
   axios.post(setUnTeach, { ids: ids.join(",") });
 

+ 3 - 2
src/app/fire/view/dispatch/index.vue

@@ -36,7 +36,7 @@
             {
               key: 'shapre',
               label: '分享',
-              onClick: () => shareFire({ projectId: row.id }),
+              onClick: () => shareCase({ caseId: row.caseId }),
             },
             {
               key: 'editInfo',
@@ -70,7 +70,8 @@ import { Fire, revokeFireTeachs, setFireTeachs } from "@/app/fire/store/fire";
 import CaseEditMenu from "@/view/case/editMenu.vue";
 import { gotoQuery } from "@/view/case/help";
 import { confirm } from "@/helper/message";
-import { addFire, editFire, shareFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
+import { addFire, editFire, showLeaveMsgList, addLeaveMsg } from "./quisk";
+import { shareCase } from "@/view/case/quisk";
 import { ElMessage } from "element-plus";
 
 const { pagging, isTeached } = useFirePagging();

+ 0 - 6
src/app/fire/view/dispatch/quisk.ts

@@ -1,7 +1,6 @@
 import EditFire from "./editFire.vue";
 import EditLeaveMsg from "./editLeaveMsg.vue";
 import LeaveMsgList from "./leaveMsgList.vue";
-import FireShare from "./share.vue";
 import { quiskMountFactory } from "@/helper/mount";
 
 export const addFire = quiskMountFactory(EditFire, {
@@ -22,8 +21,3 @@ export const showLeaveMsgList = quiskMountFactory(LeaveMsgList, {
   enterText: "发表留言",
   // power: "message:add",
 });
-
-export const shareFire = quiskMountFactory(FireShare, {
-  title: "分享",
-  enterText: "复制链接及密码",
-})<string>;

+ 5 - 1
src/hook/countdown.ts

@@ -1,4 +1,4 @@
-import { getLocal } from "@/util/localUtil";
+import { getLocal, changSaveLocal } from "@/util/localUtil";
 import { reactive, watchEffect } from "vue";
 
 // 发送手机验证码
@@ -17,6 +17,9 @@ export const countdownFactory = (miss: number = 60, key: string = "") => {
   const store: { [key in string]: CountdownStore } = reactive(
     getLocal("codeStore" + key, {})
   );
+  console.log(store);
+  changSaveLocal("codeStore" + key, () => store);
+
   const get = (key: string) => {
     if (!store[key]) {
       store[key] = {
@@ -29,6 +32,7 @@ export const countdownFactory = (miss: number = 60, key: string = "") => {
   };
   const set = async (key: string, use: (key: string) => void) => {
     const storeItem = get(key);
+    console.log(storeItem);
     if (storeItem.status !== CountdownStuts.never) {
       return;
     }

+ 7 - 2
src/request/urls.ts

@@ -14,7 +14,7 @@ export const userperInfo = "/fusion/web/user/getPerInfo";
 // 注册
 export const userReg = "/web/user/register";
 // 发送注册短信
-export const sendUserMsg = "/web/user/getMsgAuthCode";
+export const sendUserMsg = "/fusion/notAuth/getMsgAuthCode";
 // 修改密码
 export const updatePsw = "/fusion/notAuth/changePassword";
 // 新增用户
@@ -130,7 +130,6 @@ export const checkUserCamera = "/web/department/checkUserCamera/";
 export const getFireList = "/fusion/web/fireProject/queryProject";
 // 新增火调
 export const insertFire = "/fusion/web/fireProject/addNewProject";
-export const getFirePsw = "/fusion/web/fireProject/getRandCode";
 // 火调设置为教学
 export const deleteAttach = "/fusion/web/fireProject/setTeach";
 // 取消教学
@@ -142,6 +141,8 @@ export const updateFire = "/fusion/web/fireProject/updateProject";
 export const setTeach = "/fusion/web/fireProject/setTeach";
 // 火调链接地址设置密码
 export const fireSetPsw = "/fusion/web/fireProject/updateRandomCode";
+export const getFirePsw = "/fusion/web/fireProject/getRandCode";
+
 // 获取火调详情
 export const fireDetail = "/fusion/web/fireProject/getDetailWithoutAuth";
 // 获取火调详情
@@ -161,6 +162,10 @@ export const insertCaseFile = "/fusion/caseFiles/add";
 export const deleteCaseFile = "/fusion/caseFiles/delete";
 export const updateCaseFile = "/fusion/caseFiles/updateTitle";
 
+// 火调链接地址设置密码
+export const setCasePsw = "/fusion/web/fireProject/updateRandomCode";
+export const getCasePsw = "/fusion/web/fireProject/getRandCode";
+
 /** ----------------留言管理---------------- */
 // 获取留言列表
 export const getMessageList = "/fusion/web/message/getList";

+ 1 - 1
src/router/index.ts

@@ -11,7 +11,7 @@ export const router = createRouter({
 
 router.beforeEach((to, from, next) => {
   if (!to.name || to.name === RouteName.viewLayout) {
-    router.replace({ name: "home" });
+    router.replace({ name: RouteName.scene });
     return;
   }
   next();

+ 14 - 1
src/store/case.ts

@@ -1,4 +1,11 @@
-import { axios, caseInfo, caseSceneList, repCaseScenes } from "@/request";
+import {
+  axios,
+  caseInfo,
+  caseSceneList,
+  getCasePsw,
+  repCaseScenes,
+  setCasePsw,
+} from "@/request";
 import { ModelScene, QuoteScene, Scene, SceneType } from "./scene";
 
 export type Case = {
@@ -10,6 +17,12 @@ export type Case = {
   userName: number;
 };
 
+export const setCaseSharePWD = (params: { caseId: number; randCode: string }) =>
+  axios.post(setCasePsw, params);
+
+export const getCaseSharePWD = async (params: { caseId: number }) =>
+  (await axios.get<string>(getCasePsw, { params })).data;
+
 export const getCaseInfo = async (caseId: number) =>
   (await axios.get<Case>(caseInfo, { params: { caseId } })).data;
 

+ 3 - 1
src/util/localUtil.ts

@@ -14,5 +14,7 @@ export const getLocal = <T>(key: string, def: T): T => {
 };
 
 export const changSaveLocal = <T>(key: string, get: () => T) => {
-  watch(get, () => localStorage.setItem(key, JSON.stringify(get())));
+  watch(get, () => localStorage.setItem(key, JSON.stringify(get())), {
+    deep: true,
+  });
 };

+ 41 - 17
src/view/case/help.ts

@@ -1,3 +1,4 @@
+import { appConstant } from "@/app";
 import { SceneTypeDomain, SceneTypePaths } from "@/constant/scene";
 import { alert } from "@/helper/message";
 import { getCaseSceneList } from "@/store/case";
@@ -6,16 +7,25 @@ import { SceneType } from "@/store/scene";
 import { user } from "@/store/user";
 import { base64ToBlob, drawImage } from "@/util";
 
-export type MenuItem = { key: string; label: string; onClick: (caseId: number) => void };
+export type MenuItem = {
+  key: string;
+  label: string;
+  onClick: (caseId: number) => void;
+};
 
 export const getFuseCodeLink = (caseId: number, query?: boolean) => {
-  const params: { token?: string; caseId: string } = {
+  const params: { token?: string; caseId: string; app: string } = {
     caseId: caseId.toString(),
+    app: appConstant.deptId.toString(),
   };
+
   if (!query) {
     params.token = user.value.token;
   }
-  const url = new URL(SceneTypePaths[SceneType.SWMX][0], SceneTypeDomain[SceneType.SWMX]);
+  const url = new URL(
+    SceneTypePaths[SceneType.SWMX][0],
+    SceneTypeDomain[SceneType.SWMX]
+  );
   for (const [name, val] of Object.entries(params)) {
     url.searchParams.append(name, val || "");
   }
@@ -31,12 +41,12 @@ export const checkScenesOpen = async (caseId: number, url: URL | string) => {
   }
 };
 
-export const getQuery = (caseId: number) =>
-  `${getFuseCodeLink(caseId, true)}&share=1#show/summary`;
+export const getQuery = (caseId: number, share: boolean = false) =>
+  `${getFuseCodeLink(caseId, true)}${share ? "&share=1" : ""}#show/summary`;
 
 // 查看
 export const gotoQuery = (caseId: number) => {
-  checkScenesOpen(caseId, getQuery(caseId));
+  checkScenesOpen(caseId, getQuery(caseId, true));
 };
 
 export enum FuseImageType {
@@ -57,7 +67,9 @@ export const getFuseImage = async (
   if (!iframeElement) {
     return null;
   }
-  const extIframe = iframeElement.querySelector(".external") as HTMLIFrameElement;
+  const extIframe = iframeElement.querySelector(
+    ".external"
+  ) as HTMLIFrameElement;
   const targetIframe = extIframe || iframe;
   const targetWindow: any = targetIframe.contentWindow;
   const fuseCnavas = targetWindow.document.querySelector(
@@ -85,14 +97,15 @@ export const getFuseImage = async (
   } else {
     const sdk = targetWindow.__sdk;
     return new Promise<FuseImageRet>((resolve) => {
-      sdk.Camera.screenshot([{ width: width, height: width, name: "2k" }], false).then(
-        (result: any) => {
-          resolve({
-            type: FuseImageType.KANKAN,
-            blob: base64ToBlob(result[0].data),
-          });
-        }
-      );
+      sdk.Camera.screenshot(
+        [{ width: width, height: width, name: "2k" }],
+        false
+      ).then((result: any) => {
+        resolve({
+          type: FuseImageType.KANKAN,
+          blob: base64ToBlob(result[0].data),
+        });
+      });
     });
   }
 };
@@ -122,7 +135,9 @@ export const fuseImageJoinHot = async (
   ) as HTMLDivElement[];
   hotItems.forEach((hot) => {
     const hotTitle = (hot.querySelector(".tip") as HTMLDivElement).innerText;
-    const index = showTags.findIndex((tag) => tag.tagTitle.trim() === hotTitle.trim());
+    const index = showTags.findIndex(
+      (tag) => tag.tagTitle.trim() === hotTitle.trim()
+    );
     if (index !== -1) {
       const bound = hot.getBoundingClientRect();
       const size = (img.width / width) * 32;
@@ -151,7 +166,16 @@ export const fuseImageJoinHot = async (
   $ccanvas.width = width;
   $ccanvas.height = width;
   const cctx = $ccanvas.getContext("2d")!;
-  drawImage(cctx, $ccanvas.width, $ccanvas.height, $canvas, img.width, img.height, 0, 0);
+  drawImage(
+    cctx,
+    $ccanvas.width,
+    $ccanvas.height,
+    $canvas,
+    img.width,
+    img.height,
+    0,
+    0
+  );
 
   const blob = await new Promise<Blob | null>((resolve) =>
     $ccanvas.toBlob(resolve, "png")

+ 6 - 0
src/view/case/quisk.ts

@@ -1,5 +1,6 @@
 import AddCaseFile from "./addCaseFile.vue";
 import AddScenes from "./addScenes.vue";
+import ShareCase from "./share.vue";
 import EditEshapeTable, {
   EshapeTableContent,
 } from "./draw/editEshapeTable.vue";
@@ -45,3 +46,8 @@ export const selectMapImage = quiskMountFactory(SelectMapImage, {
   title: "选择地址",
   width: 588,
 })<MapImage>;
+
+export const shareCase = quiskMountFactory(ShareCase, {
+  title: "分享",
+  enterText: "复制链接及密码",
+})<string>;

+ 8 - 15
src/app/fire/view/dispatch/share.vue

@@ -26,15 +26,15 @@ import { EPSW } from "@/constant/REG";
 import { ElMessage } from "element-plus";
 import { copyText } from "@/util";
 import { getQuery } from "@/view/case/help";
-import { Fire, getFire, getFireSharePWD, setFireSharePWD } from "@/app/fire/store/fire";
+import { Fire, getFire } from "@/app/fire/store/fire";
+import { getCaseSharePWD, setCaseSharePWD } from "@/store/case";
 import { QuiskExpose } from "@/helper/mount";
 
-const props = defineProps<{ projectId: string }>();
+const props = defineProps<{ caseId: number }>();
 const randCode = ref("");
 const oldRandCode = ref("");
-const fire = ref<Fire>();
 
-const shareLink = computed(() => fire.value?.caseId && getQuery(fire.value?.caseId));
+const shareLink = computed(() => getQuery(props.caseId));
 
 const filterPSW = (val: string) => {
   if (val.length > 4) {
@@ -53,8 +53,8 @@ defineExpose<QuiskExpose>({
       throw "请输入四位数的密码!";
     }
     if (randCode.value !== oldRandCode.value) {
-      await setFireSharePWD({
-        projectId: props.projectId,
+      await setCaseSharePWD({
+        caseId: props.caseId,
         randCode: randCode.value,
       });
     }
@@ -67,15 +67,8 @@ defineExpose<QuiskExpose>({
 
 watchEffect(async () => {
   if (shareLink.value) {
-    const res = await getFireSharePWD({
-      projectId: props.projectId,
-      roteUrl: shareLink.value,
-    });
-    oldRandCode.value = randCode.value = res.randCode;
+    const code = await getCaseSharePWD({ caseId: props.caseId });
+    oldRandCode.value = randCode.value = code;
   }
 });
-
-onMounted(async () => {
-  fire.value = await getFire(props.projectId);
-});
 </script>

+ 1 - 1
src/view/system/login.vue

@@ -135,7 +135,7 @@ const submitClick = async () => {
       localStorage.setItem("remember", "0");
     }
 
-    router.replace({ name: RouteName.home });
+    router.replace({ name: RouteName.scene });
   } catch (e) {
     console.error(e);
     return refer();

+ 1 - 1
src/view/system/updatePsw.vue

@@ -46,7 +46,7 @@
 
 <script setup lang="ts">
 import { encodePwd } from "@/util";
-import { sendUserMsg, axios, openErrorMsg } from "@/request";
+import { openErrorMsg } from "@/request";
 import {
   CountdownStore,
   CountdownStuts,

+ 3 - 1
vite.config.ts

@@ -3,7 +3,7 @@ import vue from "@vitejs/plugin-vue";
 import { resolve } from "path";
 import ElementPlus from "unplugin-element-plus/vite";
 
-let app = "fire";
+let app = "criminal";
 if (process.argv.length > 3) {
   app = process.argv[process.argv.length - 1].trim();
 }
@@ -52,10 +52,12 @@ export default defineConfig({
         rewrite: (path) => path.replace(new RegExp(`^/api`), "/fusion"),
       },
       "/dev-code": {
+        // target: "https://localhost:7173/",
         target: dev
           ? "https://test-mix3d.4dkankan.com/code"
           : "https://mix3d.4dkankan.com/code",
         changeOrigin: true,
+        secure: false,
         rewrite: (path) => path.replace(new RegExp(`^/dev-code`), ""),
       },
       "/swkk": {