editMenu.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <el-dropdown v-pdpath="'edit'">
  3. <span class="oper-span">
  4. 编辑
  5. <el-icon class="el-icon--right">
  6. <arrow-down />
  7. </el-icon>
  8. </span>
  9. <template #dropdown>
  10. <el-dropdown-menu>
  11. <!-- :disabled="!operateIsPermissionByPath('edit', menu.key)" -->
  12. <el-dropdown-item v-for="menu in menus" :key="menu.key" @click="menu.onClick()">
  13. {{ menu.label }}
  14. </el-dropdown-item>
  15. </el-dropdown-menu>
  16. </template>
  17. </el-dropdown>
  18. </template>
  19. <script setup lang="ts">
  20. import { computed } from "vue";
  21. import { getFuseCodeLink, checkScenesOpen, MenuItem, getSWKKSyncLink } from "./help";
  22. import { showCaseScenes, addCaseScenes, shareCase, downloadCase } from "./quisk";
  23. import { RouteName, router } from "@/router";
  24. import { copyCase, getCaseSceneList } from "@/store/case";
  25. import { alert } from "@/helper/message";
  26. const props = defineProps<{
  27. caseId: number;
  28. title: string;
  29. prevMenu?: MenuItem[];
  30. lastMenu?: MenuItem[];
  31. }>();
  32. const menus = computed(() => {
  33. if (!props.caseId) {
  34. return [];
  35. }
  36. const caseId = props.caseId;
  37. const fuseLink = getFuseCodeLink(caseId);
  38. return [
  39. ...(props.prevMenu || []).map((item) => ({
  40. ...item,
  41. onClick: () => item.onClick(caseId),
  42. })),
  43. {
  44. key: "scene",
  45. disabled: true,
  46. label: "场景管理",
  47. onClick: () =>
  48. showCaseScenes({
  49. caseId,
  50. onAddScenes: () => addCaseScenes({ caseId }),
  51. }),
  52. },
  53. {
  54. key: "fuse",
  55. label: "多元融合",
  56. onClick: () => checkScenesOpen(caseId, `${fuseLink}#fuseEdit/merge`),
  57. },
  58. {
  59. key: "view",
  60. label: "视图提取",
  61. onClick: () => checkScenesOpen(caseId, `${fuseLink}#sceneEdit/view`),
  62. },
  63. {
  64. key: "record",
  65. label: "屏幕录制",
  66. onClick: () => checkScenesOpen(caseId, `${fuseLink}#sceneEdit/record`),
  67. },
  68. {
  69. key: "file",
  70. label: "卷宗管理",
  71. onClick: () => {
  72. window.open(
  73. router.resolve({ name: RouteName.caseFile, params: { caseId: caseId } }).href
  74. );
  75. },
  76. },
  77. {
  78. key: "sync",
  79. label: "带看",
  80. onClick: async () => {
  81. const href = await getSWKKSyncLink(caseId);
  82. window.open(href);
  83. },
  84. },
  85. {
  86. key: "share",
  87. label: "分享",
  88. onClick: async () => {
  89. const scenes = await getCaseSceneList(caseId);
  90. if (!scenes.length) {
  91. alert("当前案件下无场景,请先添加场景。");
  92. } else {
  93. shareCase({ caseId: caseId });
  94. }
  95. },
  96. },
  97. {
  98. key: "fj",
  99. label: "分镜配置",
  100. onClick: async () => {
  101. window.open(`mirror.html?caseId=${caseId}`);
  102. },
  103. },
  104. {
  105. key: "download",
  106. label: "下载",
  107. onClick: async () => {
  108. const scenes = await getCaseSceneList(caseId);
  109. if (!scenes.length) {
  110. alert("当前案件下无场景,请先添加场景。");
  111. } else {
  112. downloadCase({ caseId, title: props.title });
  113. }
  114. },
  115. },
  116. ...(props.lastMenu || []).map((item) => ({
  117. ...item,
  118. onClick: () => item.onClick(caseId),
  119. })),
  120. ];
  121. });
  122. </script>