|
@@ -31,7 +31,7 @@
|
|
|
@edit="editTagging = tagging"
|
|
|
@delete="deleteTagging(tagging)"
|
|
|
@select="selectTagging = tagging"
|
|
|
- @flyPositions="flyTaggingPositions(tagging)"
|
|
|
+ @fixed="fixedTagging(tagging)"
|
|
|
/>
|
|
|
</ui-group>
|
|
|
</RightFillPano>
|
|
@@ -47,36 +47,25 @@
|
|
|
<script lang="ts" setup>
|
|
|
import Edit from './edit.vue'
|
|
|
import TagingSign from './sign.vue'
|
|
|
-import { Message } from 'bill/index'
|
|
|
import { RightFillPano } from '@/layout'
|
|
|
-import { asyncTimeout, togetherCallback } from '@/utils'
|
|
|
import { useViewStack } from '@/hook'
|
|
|
-import { computed, nextTick, ref, watch } from 'vue';
|
|
|
+import { computed, nextTick, ref, watchEffect } from 'vue';
|
|
|
import { sdk } from '@/sdk'
|
|
|
+import { router, RoutesName } from '@/router'
|
|
|
import {
|
|
|
taggings,
|
|
|
isTemploraryID,
|
|
|
Tagging,
|
|
|
autoSaveTaggings,
|
|
|
createTagging,
|
|
|
- enterEdit,
|
|
|
getFuseModel,
|
|
|
getFuseModelShowVariable,
|
|
|
getTaggingPositions,
|
|
|
taggingPositions,
|
|
|
- createTaggingPosition,
|
|
|
- FuseModel,
|
|
|
- fuseModels
|
|
|
+ isOld,
|
|
|
+ save
|
|
|
} from '@/store'
|
|
|
-import {
|
|
|
- custom,
|
|
|
- showTaggingPositionsStack,
|
|
|
- showLeftCtrlPanoStack,
|
|
|
- showLeftPanoStack,
|
|
|
- currentModelStack,
|
|
|
- showRightCtrlPanoStack,
|
|
|
- showRightPanoStack
|
|
|
-} from '@/env'
|
|
|
+import { custom, showTaggingPositionsStack } from '@/env'
|
|
|
|
|
|
const keyword = ref('')
|
|
|
const filterTaggings = computed(() => taggings.value.filter(tagging => tagging.title.includes(keyword.value)))
|
|
@@ -99,15 +88,20 @@ const deleteTagging = (tagging: Tagging) => {
|
|
|
taggings.value.splice(index, 1)
|
|
|
}
|
|
|
|
|
|
-let stopFlyTaggingPositions: () => void
|
|
|
-const flyTaggingPositions = (tagging: Tagging) => {
|
|
|
+const fixedTagging = async (tagging: Tagging) => {
|
|
|
+ if (isOld.value) {
|
|
|
+ await save()
|
|
|
+ }
|
|
|
+ router.push({ name: RoutesName.taggingPosition, params: { id: tagging.id } })
|
|
|
+}
|
|
|
+
|
|
|
+const flyTaggingPositions = (tagging: Tagging, callback?: () => void) => {
|
|
|
const positions = getTaggingPositions(tagging)
|
|
|
- stopFlyTaggingPositions && stopFlyTaggingPositions()
|
|
|
|
|
|
let isStop = false
|
|
|
-
|
|
|
const flyIndex = (i: number) => {
|
|
|
if (isStop || i >= positions.length) {
|
|
|
+ callback && nextTick(callback)
|
|
|
return;
|
|
|
}
|
|
|
const position = positions[i]
|
|
@@ -117,7 +111,6 @@ const flyTaggingPositions = (tagging: Tagging) => {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
const pop = showTaggingPositionsStack.push(ref(new WeakSet([position])))
|
|
|
sdk.comeTo({
|
|
|
position: position.localPos,
|
|
@@ -132,75 +125,21 @@ const flyTaggingPositions = (tagging: Tagging) => {
|
|
|
}, 2000)
|
|
|
}
|
|
|
flyIndex(0)
|
|
|
- stopFlyTaggingPositions = () => isStop = true
|
|
|
-}
|
|
|
-
|
|
|
-const stopFlyKeyupHandler = (ev: KeyboardEvent) => {
|
|
|
- ev.code === 'Escape' && stopFlyTaggingPositions && stopFlyTaggingPositions()
|
|
|
+ return () => isStop = true
|
|
|
}
|
|
|
-useViewStack(() => {
|
|
|
- document.documentElement.addEventListener('keyup', stopFlyKeyupHandler, false)
|
|
|
- return () => document.documentElement.removeEventListener('keydown', stopFlyKeyupHandler, false)
|
|
|
-})
|
|
|
|
|
|
const selectTagging = ref<Tagging | null>(null)
|
|
|
-watch(selectTagging, (a, b, onCleanup) => {
|
|
|
+watchEffect((onCleanup) => {
|
|
|
if (selectTagging.value) {
|
|
|
- const leave = () => selectTagging.value = null
|
|
|
+ const success = () => selectTagging.value = null
|
|
|
+ const stop = flyTaggingPositions(selectTagging.value, success)
|
|
|
+ const keyupHandler = (ev: KeyboardEvent) => ev.code === 'Escape' && success()
|
|
|
|
|
|
- let currentModel: FuseModel | null = custom.currentModel
|
|
|
- if (!currentModel) {
|
|
|
- for (const [model, show] of custom.showModelsMap.entries()) {
|
|
|
- show && (currentModel = model)
|
|
|
- }
|
|
|
- if (!currentModel) {
|
|
|
- Message.error('请显示要添加热点的模型')
|
|
|
- leave()
|
|
|
- return
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- const pop = togetherCallback([
|
|
|
- showLeftCtrlPanoStack.push(ref(true)),
|
|
|
- showLeftPanoStack.push(ref(true)),
|
|
|
- showRightCtrlPanoStack.push(ref(false)),
|
|
|
- showRightPanoStack.push(ref(false))
|
|
|
- ])
|
|
|
-
|
|
|
- const clickHandler = async (ev: MouseEvent) => {
|
|
|
- await nextTick()
|
|
|
- await asyncTimeout()
|
|
|
- const positions = fuseModels.value
|
|
|
- .map(model =>
|
|
|
- sdk.getPositionByScreen({
|
|
|
- x: ev.clientX,
|
|
|
- y: ev.clientY
|
|
|
- }, model.id)
|
|
|
- )
|
|
|
- .filter(pos => pos)
|
|
|
-
|
|
|
- console.log(fuseModels.value)
|
|
|
- if (!positions.length) {
|
|
|
- Message.error('当前位置无法添加')
|
|
|
- } else if (selectTagging.value) {
|
|
|
- const storePosition = createTaggingPosition({
|
|
|
- ...positions[0],
|
|
|
- taggingId: selectTagging.value.id
|
|
|
- })
|
|
|
- taggingPositions.value.push(storePosition)
|
|
|
- leave()
|
|
|
- }
|
|
|
- }
|
|
|
- const keyupHandler = (ev: KeyboardEvent) => ev.code === 'Escape' && leave()
|
|
|
-
|
|
|
- document.documentElement.addEventListener('keyup', keyupHandler, false);
|
|
|
- sdk.layout.addEventListener('click', clickHandler, false)
|
|
|
-
|
|
|
- enterEdit(leave)
|
|
|
+ document.documentElement.addEventListener('keyup', keyupHandler, false)
|
|
|
onCleanup(() => {
|
|
|
- document.documentElement.removeEventListener('keyup', keyupHandler, false);
|
|
|
- sdk.layout.removeEventListener('click', clickHandler, false);
|
|
|
- pop()
|
|
|
+ stop()
|
|
|
+ console.log('removeHandler')
|
|
|
+ document.documentElement.removeEventListener('keyup', keyupHandler, false)
|
|
|
})
|
|
|
}
|
|
|
})
|