Merge branch 'deploy-2.0' into delete_station
| | |
| | | <span class="modal-title">{{ title }}</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div class="cursor-pointer" @click="handleClose"> |
| | | <span class="modal-close-icon">×</span> |
| | | <div class="modal-close-trigger" @click="handleClose"> |
| | | <span class="modal-close-icon modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | pointer-events: none !important; |
| | | cursor: default !important; |
| | | } |
| | | |
| | | .modal-close-trigger { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 28px; |
| | | height: 28px; |
| | | border-radius: 6px; |
| | | cursor: pointer; |
| | | user-select: none; |
| | | transition: background-color 0.2s ease, color 0.2s ease; |
| | | } |
| | | |
| | | .modal-close-trigger:hover { |
| | | background-color: rgba(23, 31, 38, 0.08); |
| | | } |
| | | |
| | | .modal-close-trigger:active { |
| | | background-color: rgba(23, 31, 38, 0.14); |
| | | } |
| | | |
| | | .modal-close-trigger > * { |
| | | pointer-events: none; |
| | | } |
| | | |
| | | .modal-close-text { |
| | | display: inline-flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 10px; |
| | | height: 10px; |
| | | font-size: 18px; |
| | | line-height: 1; |
| | | } |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择成员</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px;width: 10px;height: 10px;">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <span style="font-size: 16px; font-weight: bold">添加车辆</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | </template> |
| | | |
| | | <template #header-extra> |
| | | <div class="close-btn" @click="handleCancel"> |
| | | <span class="close-icon">×</span> |
| | | <div class="close-btn modal-close-trigger" @click="handleCancel"> |
| | | <span class="close-icon modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | } |
| | | |
| | | .close-btn { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | width: 20px; |
| | | height: 20px; |
| | | cursor: pointer; |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .close-icon { |
| | |
| | | render: (row) => { |
| | | return ( |
| | | <NSpace wrap={false} size={8}> |
| | | <NButton |
| | | text |
| | | v-permission="50119" |
| | | type="primary" |
| | | onClick={() => handleDetail(row)} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | {row.status == '1' && ( |
| | | <NButton |
| | | text |
| | |
| | | 更新信息 |
| | | </NButton> |
| | | )} |
| | | <NButton |
| | | text |
| | | v-permission="50119" |
| | | type="primary" |
| | | onClick={() => handleDetail(row)} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | |
| | | {/* <NButton |
| | | text |
| | | v-permission="50120" |
| | |
| | | <NSpace justify="flex-start" wrap={false} size={8}> |
| | | <NButton |
| | | text |
| | | v-permission="50134" |
| | | type="primary" |
| | | onClick={() => handleConvertToInventory(row)} |
| | | > |
| | | 转为在库车辆 |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="50131" |
| | | type="primary" |
| | | onClick={() => handleViewDetail(row)} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="50134" |
| | | type="primary" |
| | | onClick={() => handleConvertToInventory(row)} |
| | | > |
| | | 转为在库车辆 |
| | | </NButton> |
| | | |
| | | </NSpace> |
| | | ) |
| | | }, |
| | |
| | | |
| | | <div |
| | | class="absolute bottom-0 left-0 right-0 flex justify-end gap-3 bg-white px-6 py-4" |
| | | style="box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1); z-index: 100" |
| | | style="box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.1); z-index: 100" v-if="isEdit" |
| | | > |
| | | <NButton style="width: 84px; height: 32px" @click="handleBack"> |
| | | 返回 |
| | | </NButton> |
| | | <NButton |
| | | v-if="isEdit" |
| | | |
| | | type="primary" |
| | | style="width: 84px; height: 32px" |
| | | @click="handleSave" |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择点位</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | <div class="flex flex-col h-full overflow-hidden"> |
| | |
| | | > |
| | | <div class="schedule-selector-header"> |
| | | <span class="schedule-selector-title">排班选择</span> |
| | | <n-icon size="20" class="cursor-pointer" @click="closeScheduleModal"> |
| | | <svg |
| | | xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" |
| | | stroke-linecap="round" stroke-linejoin="round" |
| | | > |
| | | <line x1="18" y1="6" x2="6" y2="18" /> |
| | | <line x1="6" y1="6" x2="18" y2="18" /> |
| | | </svg> |
| | | </n-icon> |
| | | <div class="modal-close-trigger" @click="closeScheduleModal"> |
| | | <n-icon size="20"> |
| | | <svg |
| | | xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" |
| | | stroke-linecap="round" stroke-linejoin="round" |
| | | > |
| | | <line x1="18" y1="6" x2="6" y2="18" /> |
| | | <line x1="6" y1="6" x2="18" y2="18" /> |
| | | </svg> |
| | | </n-icon> |
| | | </div> |
| | | </div> |
| | | <div class="schedule-selector-content"> |
| | | <div |
| | |
| | | <line x1="15" y1="9" x2="9" y2="15" /> |
| | | <line x1="9" y1="9" x2="15" y2="15" /> |
| | | </svg> |
| | | </n-icon> --> |
| | | </n-icon> |
| | | </div> --> |
| | | <img v-if="shifts && shifts.length > 0" src="/src/assets/point/warn.png" class="cell-delete-icon" @click.stop="openDeleteConfirm(teamIndex, dateIndex)"> |
| | | </span> |
| | | </div> |
| | |
| | | > |
| | | <div class="schedule-selector-header"> |
| | | <span class="schedule-selector-title">排班选择</span> |
| | | <n-icon size="20" class="cursor-pointer" @click="closeScheduleModal"> |
| | | <svg |
| | | xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" |
| | | stroke-linecap="round" stroke-linejoin="round" |
| | | > |
| | | <line x1="18" y1="6" x2="6" y2="18" /> |
| | | <line x1="6" y1="6" x2="18" y2="18" /> |
| | | </svg> |
| | | </n-icon> |
| | | <div class="modal-close-trigger" @click="closeScheduleModal"> |
| | | <n-icon size="20"> |
| | | <svg |
| | | xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" |
| | | stroke-linecap="round" stroke-linejoin="round" |
| | | > |
| | | <line x1="18" y1="6" x2="6" y2="18" /> |
| | | <line x1="6" y1="6" x2="18" y2="18" /> |
| | | </svg> |
| | | </n-icon> |
| | | </div> |
| | | </div> |
| | | <div class="schedule-selector-content"> |
| | | <div |
| | |
| | | <div class="flex items-center justify-start gap-2"> |
| | | <span |
| | | class="cursor-pointer" |
| | | v-permission="202642962" |
| | | style={{ color: '#0068FF' }} |
| | | onClick={() => handleEdit(row)} |
| | | > |
| | | 编辑 |
| | | </span> |
| | | <span |
| | | class="cursor-pointer" |
| | | v-permission="202642963" |
| | | style={{ color: '#0068FF' }} |
| | | onClick={() => handleDetail(row)} |
| | |
| | | </span> |
| | | <span |
| | | class="cursor-pointer" |
| | | v-permission="202642962" |
| | | style={{ color: '#0068FF' }} |
| | | onClick={() => handleEdit(row)} |
| | | > |
| | | 编辑 |
| | | </span> |
| | | |
| | | <span |
| | | class="cursor-pointer" |
| | | v-permission="202642964" |
| | | style={{ color: '#0068FF' }} |
| | | onClick={() => handleDelete(row)} |
| | |
| | | <div class="flex items-center gap-16px"> |
| | | |
| | | {/* <a v-permission="70115" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleEdit(row)}>编辑</a> */} |
| | | <a v-permission="70117" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleResetPassword(row)}>重置密码</a> |
| | | <a v-permission="70111" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => router.push(`/operations/personnel/personnelManagement/detail/${row.id}`)}>详情</a> |
| | | <a v-permission="70117" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleResetPassword(row)}>重置密码</a> |
| | | <a v-permission="70118" style={{ color: '#0068FF', cursor: 'pointer' }} onClick={() => handleDelete(row)}>删除</a> |
| | | <NSwitch |
| | | v-permission="70116" |
| | |
| | | <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">任务改派</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text class="cursor-pointer" @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span> |
| | | <div text class="cursor-pointer modal-close-trigger" @click="handleCancel"> |
| | | <span class="modal-close-text" style="color: #999;">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | render: (row) => { |
| | | return ( |
| | | <NSpace> |
| | | <NButton |
| | | text |
| | | v-permission="7054" |
| | | type="primary" |
| | | onClick={() => handleDetail(row)} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | {(row.status === 0 || row.status === 1) && ( |
| | | <NButton |
| | | text |
| | |
| | | 分配 |
| | | </NButton> |
| | | )} |
| | | <NButton |
| | | text |
| | | v-permission="7054" |
| | | type="primary" |
| | | onClick={() => handleDetail(row)} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | |
| | | <NButton |
| | | text |
| | | v-permission="7055" |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择点位</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px;width: 10px;height: 10px;">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | <div class="mb-4 flex items-end gap-4"> |
| | |
| | | <span style="font-size: 16px; font-weight: bold">{{ modalTitle }}</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div class="cursor-pointer" text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="cursor-pointer modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <span style="font-size: 16px; font-weight: bold">管理测试车辆</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div class="cursor-pointer" text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="cursor-pointer modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择点位</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择测试车辆</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px">×</span> |
| | | <div class="modal-close-trigger" text @click="handleCancel"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { uploadSingleFile } from '@/utils/upload' |
| | | |
| | | // 定义地图图标在线链接 |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/36c926b7-1e6d-4310-86c2-a71b69dc49b7.png' |
| | | const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/8f048a0f-3c36-4b6e-ae14-77d85bc919bf.png' |
| | | const MARK_ICON_RED = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/d8c0a834-069f-4e11-8130-1257d73ef449.png' |
| | | const MARK_ICON_GREEN = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/ab2e2d89-ea82-4081-9729-ab212460c375.png' |
| | | const MARK_ICON_BLUE = 'https://huishou-1323682843.cos.ap-nanjing.myqcloud.com/images/73a51310-2871-4c4a-a763-8e1a59a31f50.png' |
| | | |
| | | const router = useRouter() |
| | |
| | | <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">设置巡游计划</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text class="cursor-pointer" @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span> |
| | | <div text class="cursor-pointer modal-close-trigger" @click="handleCancel"> |
| | | <span class="modal-close-text" style="color: #999;">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | <span style="font-size: 16px; font-weight: bold; color: #1F1F1F;">选择用户</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div text class="cursor-pointer" @click="handleCancel"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px; color: #999;">×</span> |
| | | <div text class="cursor-pointer modal-close-trigger" @click="handleCancel"> |
| | | <span class="modal-close-text" style="color: #999;">×</span> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | { label: '待评价', value: 9, type: 'default', color: '#FFF8E6', textColor: '#FF9000' }, |
| | | { label: '已完成', value: 10, type: 'success', color: '#DCF5DD', textColor: '#0BB52D' }, |
| | | { label: '已取消', value: 0, type: 'default', color: '#171F260D', textColor: '#171F26CC' }, |
| | | { label: '退款中', value: 11, type: 'warning', color: '#FFF8E6', textColor: '#FF9000' }, |
| | | { label: '已退款', value: 12, type: 'success', color: '#DCF5DD', textColor: '#0BB52D' }, |
| | | { label: '退款失败', value: 13, type: 'error', color: '#FFF8E6', textColor: '#FF9000' }, |
| | | ] |
| | | |
| | | const columns = computed<DataTableColumns<any>>(() => [ |
| | |
| | | <div class="flex items-center justify-start gap-2"> |
| | | <NButton |
| | | text |
| | | v-permission="202642951" |
| | | type="primary" |
| | | onClick={() => handleEdit(row)} |
| | | > |
| | | 编辑 |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="202642952" |
| | | type="primary" |
| | | onClick={() => handleDetail(row)} |
| | |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="202642951" |
| | | type="primary" |
| | | onClick={() => handleEdit(row)} |
| | | > |
| | | 编辑 |
| | | </NButton> |
| | | |
| | | <NButton |
| | | text |
| | | v-permission="202642953" |
| | | type="primary" |
| | | onClick={() => handleDelete(row)} |
| | |
| | | </NButton> */} |
| | | <NButton |
| | | text |
| | | v-permission="6023" |
| | | type="primary" |
| | | onClick={() => router.push({ name: 'setPrice', query: { id: row.id, type: 'add', category: row.pricingType } })} |
| | | > |
| | | 设置价格 |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="6024" |
| | | type="primary" |
| | | onClick={() => router.push({ name: 'pricingDetail', query: { id: row.id, type: 'view', category: row.pricingType } })} |
| | | > |
| | | 详情 |
| | | </NButton> |
| | | <NButton |
| | | text |
| | | v-permission="6023" |
| | | type="primary" |
| | | onClick={() => router.push({ name: 'setPrice', query: { id: row.id, type: 'add', category: row.pricingType } })} |
| | | > |
| | | 设置价格 |
| | | </NButton> |
| | | |
| | | {/* <NButton |
| | | text |
| | | v-permission="6025" |
| | |
| | | function createUserColumns(groupIndex: number): DataTableColumns<any> { |
| | | return [ |
| | | { title: '用户名称', key: 'nickName', width: 150 }, |
| | | { title: '白名单账号', key: 'account' }, |
| | | { title: '白名单账号', key: 'account',width:220 }, |
| | | { |
| | | title: '状态', |
| | | key: 'status', |
| | |
| | | .custom-tabs { |
| | | position: fixed; |
| | | background-color: rgb(244, 246, 248); |
| | | z-index: 9999; |
| | | z-index: 999; |
| | | padding: 12px 12px 0 12px; |
| | | } |
| | | :deep(.n-upload-trigger--image-card) { |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择优惠券</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div @click="showModal = false"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span> |
| | | <div class="modal-close-trigger" @click="showModal = false"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | <div class="flex flex-col h-full overflow-hidden"> |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择用户</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div @click="showModal = false"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span> |
| | | <div class="modal-close-trigger" @click="showModal = false"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | <div class="flex flex-col h-full overflow-hidden"> |
| | |
| | | <span style="font-size: 16px; font-weight: bold">选择用户</span> |
| | | </template> |
| | | <template #header-extra> |
| | | <div @click="showModal = false"> |
| | | <span style="font-size: 18px; width: 10px; height: 10px;cursor: pointer;">×</span> |
| | | <div class="modal-close-trigger" @click="showModal = false"> |
| | | <span class="modal-close-text">×</span> |
| | | </div> |
| | | </template> |
| | | <div class="flex flex-col h-full overflow-hidden"> |
| | |
| | | const status = Number(row.status) |
| | | return ( |
| | | <n-space size={12}> |
| | | <NButton text type="primary" v-permission="302314" onClick={() => handleDetail(row)}> |
| | | 详情 |
| | | </NButton> |
| | | {status === 2 && ( |
| | | <NButton v-permission="302313" text type="primary" onClick={() => handleSend(row)}> |
| | | 发券 |
| | | </NButton> |
| | | )} |
| | | <NButton text type="primary" v-permission="302314" onClick={() => handleDetail(row)}> |
| | | 详情 |
| | | </NButton> |
| | | {status === 1 && ( |
| | | <NButton text type="primary" v-permission="302316" onClick={() => handleEdit(row)}> |
| | | 编辑 |
| | |
| | | import noDataImg from "@/assets/element-img/no-data.png"; |
| | | import { computed, h, onMounted, ref, watch } from "vue"; |
| | | import { useRouter } from "vue-router"; |
| | | import { NButton, NDataTable, NPopconfirm, NSpace, useMessage } from "naive-ui"; |
| | | import { NButton, NDataTable, NSpace, useDialog, useMessage } from "naive-ui"; |
| | | import type { DataTableColumns } from "naive-ui"; |
| | | import OperationLogModal from "@/components/custom/OperationLogModal.vue"; |
| | | import dragIcon from "@/assets/point/union.png"; |
| | |
| | | } |
| | | |
| | | const router = useRouter(); |
| | | const dialog = useDialog(); |
| | | const message = useMessage(); |
| | | const tableLoading = ref(false); |
| | | const deleteLoadingId = ref<number | null>(null); |
| | |
| | | { default: () => "编辑" } |
| | | ), |
| | | h( |
| | | NPopconfirm, |
| | | { onPositiveClick: () => handleDelete(row) }, |
| | | NButton, |
| | | { |
| | | trigger: () => |
| | | h( |
| | | NButton, |
| | | { |
| | | text: true, |
| | | type: "primary", |
| | | loading: deleteLoadingId.value === row.id, |
| | | }, |
| | | { default: () => "删除" } |
| | | ), |
| | | default: () => "确认删除该协议吗?", |
| | | text: true, |
| | | type: "primary", |
| | | loading: deleteLoadingId.value === row.id, |
| | | onClick: () => handleDelete(row), |
| | | }, |
| | | { |
| | | default: () => "删除", |
| | | } |
| | | ), |
| | | ], |
| | |
| | | } |
| | | |
| | | async function handleDelete(row: AgreementItem) { |
| | | if (deleteLoadingId.value === row.nameId) return; |
| | | |
| | | dialog.warning({ |
| | | maskClosable: false, |
| | | title: "确认删除", |
| | | content: `确认删除协议"${row.title}"吗?`, |
| | | positiveText: "确定", |
| | | negativeText: "取消", |
| | | autoFocus: false, |
| | | onPositiveClick: async () => { |
| | | await executeDelete(row); |
| | | }, |
| | | }); |
| | | } |
| | | |
| | | async function executeDelete(row: AgreementItem) { |
| | | deleteLoadingId.value = row.nameId; |
| | | try { |
| | | const res = await deleteLoginAgreement(row.nameId); |
| | |
| | | message.success("删除成功"); |
| | | await loadList(); |
| | | } else { |
| | | // message.error(res?.msg || '删除失败') |
| | | message.error(res?.msg || "删除失败"); |
| | | } |
| | | } catch (error: any) { |
| | | message.error(error?.message || "删除失败"); |
| | | } finally { |
| | | deleteLoadingId.value = null; |
| | | } |