feat(ui) : sync task code in URL for deep-linking from Gitea
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -17,6 +17,8 @@ import { useUserService } from '~/services/users'
|
|||||||
import { useProjectService } from '~/services/projects'
|
import { useProjectService } from '~/services/projects'
|
||||||
|
|
||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const auth = useAuthStore()
|
const auth = useAuthStore()
|
||||||
|
|
||||||
useHead({ title: t('myTasks.title') })
|
useHead({ title: t('myTasks.title') })
|
||||||
@@ -220,13 +222,23 @@ async function onDropBacklog(event: DragEvent) {
|
|||||||
function openTaskCreate() {
|
function openTaskCreate() {
|
||||||
selectedTask.value = null
|
selectedTask.value = null
|
||||||
taskModalOpen.value = true
|
taskModalOpen.value = true
|
||||||
|
router.replace({ query: {} })
|
||||||
}
|
}
|
||||||
|
|
||||||
function openTaskEdit(task: Task) {
|
function openTaskEdit(task: Task) {
|
||||||
selectedTask.value = task
|
selectedTask.value = task
|
||||||
taskModalOpen.value = true
|
taskModalOpen.value = true
|
||||||
|
if (task.project?.code && task.number) {
|
||||||
|
router.replace({ query: { task: `${task.project.code}-${task.number}` } })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watch(taskModalOpen, (open) => {
|
||||||
|
if (!open) {
|
||||||
|
router.replace({ query: {} })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
async function onSaved() {
|
async function onSaved() {
|
||||||
await loadTasks()
|
await loadTasks()
|
||||||
}
|
}
|
||||||
@@ -277,8 +289,22 @@ async function onBulkDelete() {
|
|||||||
await loadTasks()
|
await loadTasks()
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
loadAll()
|
await loadAll()
|
||||||
|
const taskParam = route.query.task as string | undefined
|
||||||
|
if (taskParam) {
|
||||||
|
const dashIndex = taskParam.lastIndexOf('-')
|
||||||
|
if (dashIndex > 0) {
|
||||||
|
const code = taskParam.slice(0, dashIndex)
|
||||||
|
const num = Number(taskParam.slice(dashIndex + 1))
|
||||||
|
if (num) {
|
||||||
|
const task = tasks.value.find(t => t.project?.code === code && t.number === num)
|
||||||
|
if (task) {
|
||||||
|
openTaskEdit(task)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ import { useTaskGroupService } from '~/services/task-groups'
|
|||||||
import { useUserService } from '~/services/users'
|
import { useUserService } from '~/services/users'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
const router = useRouter()
|
||||||
const projectId = computed(() => Number(route.params.id))
|
const projectId = computed(() => Number(route.params.id))
|
||||||
|
|
||||||
useHead({ title: 'Projet' })
|
useHead({ title: 'Projet' })
|
||||||
@@ -349,13 +350,23 @@ async function loadData() {
|
|||||||
function openTaskCreate() {
|
function openTaskCreate() {
|
||||||
selectedTask.value = null
|
selectedTask.value = null
|
||||||
taskDrawerOpen.value = true
|
taskDrawerOpen.value = true
|
||||||
|
router.replace({ query: {} })
|
||||||
}
|
}
|
||||||
|
|
||||||
function openTaskEdit(task: Task) {
|
function openTaskEdit(task: Task) {
|
||||||
selectedTask.value = task
|
selectedTask.value = task
|
||||||
taskDrawerOpen.value = true
|
taskDrawerOpen.value = true
|
||||||
|
if (project.value?.code && task.number) {
|
||||||
|
router.replace({ query: { task: `${project.value.code}-${task.number}` } })
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watch(taskDrawerOpen, (open) => {
|
||||||
|
if (!open) {
|
||||||
|
router.replace({ query: {} })
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
function onDragEnter(id: number) {
|
function onDragEnter(id: number) {
|
||||||
dragCounter.value++
|
dragCounter.value++
|
||||||
dragOverStatusId.value = id
|
dragOverStatusId.value = id
|
||||||
@@ -445,7 +456,20 @@ async function onProjectSaved() {
|
|||||||
await loadData()
|
await loadData()
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(async () => {
|
||||||
loadData()
|
await loadData()
|
||||||
|
const taskParam = route.query.task as string | undefined
|
||||||
|
if (taskParam && project.value) {
|
||||||
|
const prefix = `${project.value.code}-`
|
||||||
|
if (taskParam.startsWith(prefix)) {
|
||||||
|
const num = Number(taskParam.slice(prefix.length))
|
||||||
|
if (num) {
|
||||||
|
const task = tasks.value.find(t => t.number === num)
|
||||||
|
if (task) {
|
||||||
|
openTaskEdit(task)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user