feat: 09 => select ready select all (order)
This commit is contained in:
parent
21452b6a9f
commit
52a0baa1a4
2 changed files with 86 additions and 16 deletions
|
|
@ -318,6 +318,8 @@ function assignTempGroup() {
|
|||
<div class="q-pa-md full-width">
|
||||
<TableEmployee
|
||||
checkbox-on
|
||||
check-all
|
||||
select-ready
|
||||
:step-on="!creditNote"
|
||||
:statusOn="creditNote"
|
||||
:rows="
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@ import { RequestWork } from 'src/stores/request-list';
|
|||
import { QuotationFull } from 'src/stores/quotations/types';
|
||||
import { dateFormatJS, calculateAge } from 'src/utils/datetime';
|
||||
import { TaskStatus } from 'src/stores/task-order/types';
|
||||
import { computed } from 'vue';
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
validate?: boolean;
|
||||
checkboxOn?: boolean;
|
||||
checkAll?: boolean;
|
||||
selectReady?: boolean;
|
||||
stepOn?: boolean;
|
||||
statusOn?: boolean;
|
||||
rows: QTableProps['rows'];
|
||||
|
|
@ -43,6 +45,12 @@ const selectedEmployee = defineModel<
|
|||
default: [],
|
||||
});
|
||||
|
||||
const selectedEmployeeInTable = computed(() => {
|
||||
return selectedEmployee.value.filter((s) =>
|
||||
props.rows.some((r) => s.id === r.id),
|
||||
);
|
||||
});
|
||||
|
||||
defineEmits<{
|
||||
(
|
||||
e: 'changeAllStatus',
|
||||
|
|
@ -98,6 +106,8 @@ function goToRequestList(id: string) {
|
|||
}
|
||||
|
||||
function handleCheckAll() {
|
||||
if (disableCheckAll()) return;
|
||||
|
||||
const arr = JSON.parse(JSON.stringify(props.rows));
|
||||
const shouldExclude = (status: TaskStatus, validate: boolean) =>
|
||||
validate
|
||||
|
|
@ -120,13 +130,53 @@ function handleCheckAll() {
|
|||
} | null;
|
||||
taskStatus: TaskStatus;
|
||||
},
|
||||
) => !shouldExclude(t.taskStatus, props.validate),
|
||||
) =>
|
||||
props.selectReady
|
||||
? !selectedEmployee.value.some(
|
||||
(v) => v._template?.id !== t._template?.id,
|
||||
)
|
||||
: !shouldExclude(t.taskStatus, props.validate),
|
||||
);
|
||||
|
||||
if (selectedEmployee.value.length !== selectableTasks.length) {
|
||||
selectedEmployee.value = selectableTasks;
|
||||
const selectedIds = new Set(selectedEmployee.value.map((v) => v.id));
|
||||
|
||||
if (selectedEmployeeInTable.value.length !== selectableTasks.length) {
|
||||
selectableTasks.forEach(
|
||||
(
|
||||
task: RequestWork & {
|
||||
_template?: {
|
||||
id: string;
|
||||
templateName: string;
|
||||
templateStepName: string;
|
||||
step: number;
|
||||
} | null;
|
||||
taskStatus: TaskStatus;
|
||||
},
|
||||
) => {
|
||||
if (!selectedIds.has(task.id)) {
|
||||
selectedEmployee.value.push(task);
|
||||
}
|
||||
},
|
||||
);
|
||||
} else {
|
||||
selectedEmployee.value = [];
|
||||
const selectableTaskIds = new Set(
|
||||
selectableTasks.map(
|
||||
(
|
||||
task: RequestWork & {
|
||||
_template?: {
|
||||
id: string;
|
||||
templateName: string;
|
||||
templateStepName: string;
|
||||
step: number;
|
||||
} | null;
|
||||
taskStatus: TaskStatus;
|
||||
},
|
||||
) => task.id,
|
||||
),
|
||||
);
|
||||
selectedEmployee.value = selectedEmployee.value.filter(
|
||||
(task) => !selectableTaskIds.has(task.id),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -159,6 +209,14 @@ function handleCheck(
|
|||
selectedEmployee.value.push(row);
|
||||
}
|
||||
}
|
||||
|
||||
function disableCheckAll() {
|
||||
if (!props.selectReady) return false;
|
||||
const firstTemplate = props.rows[0]?._template.id;
|
||||
const hasDifferent = props.rows.some((r) => r._template.id !== firstTemplate);
|
||||
|
||||
return hasDifferent && selectedEmployee.value.length === 0;
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<q-table
|
||||
|
|
@ -212,26 +270,36 @@ function handleCheck(
|
|||
<q-th v-if="checkboxOn" class="relative-position">
|
||||
<q-checkbox
|
||||
v-if="checkAll"
|
||||
:disable="disableCheckAll()"
|
||||
:model-value="
|
||||
selectedEmployee.length > 0 &&
|
||||
selectedEmployee.length ===
|
||||
(validate
|
||||
selectedEmployeeInTable.length > 0 &&
|
||||
selectedEmployeeInTable.length ===
|
||||
(selectReady
|
||||
? rows.filter(
|
||||
(t) =>
|
||||
t.taskStatus !== TaskStatus.Complete &&
|
||||
t.taskStatus !== TaskStatus.Success,
|
||||
t._template.id ===
|
||||
selectedEmployeeInTable[0]?._template?.id,
|
||||
).length
|
||||
: rows.filter(
|
||||
(t) =>
|
||||
t.taskStatus !== TaskStatus.Complete &&
|
||||
t.taskStatus !== TaskStatus.Success &&
|
||||
t.taskStatus !== TaskStatus.Failed,
|
||||
).length)
|
||||
: validate
|
||||
? rows.filter(
|
||||
(t) =>
|
||||
t.taskStatus !== TaskStatus.Complete &&
|
||||
t.taskStatus !== TaskStatus.Success,
|
||||
).length
|
||||
: rows.filter(
|
||||
(t) =>
|
||||
t.taskStatus !== TaskStatus.Complete &&
|
||||
t.taskStatus !== TaskStatus.Success &&
|
||||
t.taskStatus !== TaskStatus.Failed,
|
||||
).length)
|
||||
"
|
||||
@click="handleCheckAll"
|
||||
size="sm"
|
||||
/>
|
||||
<div v-if="checkAll" class="absolute-right row items-center">
|
||||
<div
|
||||
v-if="checkAll && !selectReady"
|
||||
class="absolute-right row items-center"
|
||||
>
|
||||
<q-btn
|
||||
flat
|
||||
dense
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue