65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
import { useQuasar } from 'quasar';
|
|
import { useI18n } from 'vue-i18n';
|
|
import { useRouter } from 'vue-router';
|
|
import axios from 'axios';
|
|
import VnConfirm from 'components/ui/VnConfirm.vue';
|
|
|
|
export async function checkEntryLock(entryFk, userFk) {
|
|
const { t } = useI18n();
|
|
const quasar = useQuasar();
|
|
const { push } = useRouter();
|
|
const { data } = await axios.get(`Entries/${entryFk}`, {
|
|
params: {
|
|
filter: JSON.stringify({
|
|
fields: ['id', 'locked', 'lockerUserFk'],
|
|
include: { relation: 'user', scope: { fields: ['id', 'nickname'] } },
|
|
}),
|
|
},
|
|
});
|
|
const entryConfig = await axios.get('EntryConfigs/findOne');
|
|
|
|
if (data?.lockerUserFk && data?.locked) {
|
|
const now = new Date(Date.vnNow()).getTime();
|
|
const lockedTime = new Date(data.locked).getTime();
|
|
const timeDiff = (now - lockedTime) / 1000;
|
|
const isMaxTimeLockExceeded = entryConfig.data.maxLockTime > timeDiff;
|
|
|
|
if (data?.lockerUserFk !== userFk && isMaxTimeLockExceeded) {
|
|
quasar
|
|
.dialog({
|
|
component: VnConfirm,
|
|
componentProps: {
|
|
title: t('entry.lock.title'),
|
|
message: t('entry.lock.message', {
|
|
userName: data?.user?.nickname,
|
|
time: timeDiff / 60,
|
|
}),
|
|
},
|
|
})
|
|
.onOk(
|
|
async () =>
|
|
await axios.patch(`Entries/${entryFk}`, {
|
|
locked: Date.vnNow(),
|
|
lockerUserFk: userFk,
|
|
}),
|
|
)
|
|
.onCancel(() => {
|
|
push({ path: `summary` });
|
|
});
|
|
}
|
|
} else {
|
|
await axios
|
|
.patch(`Entries/${entryFk}`, {
|
|
locked: Date.vnNow(),
|
|
lockerUserFk: userFk,
|
|
})
|
|
.then(
|
|
quasar.notify({
|
|
message: t('entry.lock.success'),
|
|
color: 'positive',
|
|
group: false,
|
|
}),
|
|
);
|
|
}
|
|
}
|