feat: enhance task status handling and validation in TableEmployee & fail comment

This commit is contained in:
puriphatt 2024-12-27 14:11:40 +07:00
parent cce1eccf8c
commit c64af9d992
3 changed files with 63 additions and 42 deletions

View file

@ -30,6 +30,7 @@ const props = withDefaults(
const selectedEmployee = defineModel<
(RequestWork & {
taskStatus: TaskStatus;
_template?: {
id: string;
templateName: string;
@ -97,6 +98,16 @@ function goToRequestList(id: string) {
function handleCheckAll() {
const arr = JSON.parse(JSON.stringify(props.rows));
const shouldExclude = (status: TaskStatus, validate: boolean) =>
validate
? status === TaskStatus.Success ||
status === TaskStatus.Complete ||
status === TaskStatus.Redo
: status === TaskStatus.Failed ||
status === TaskStatus.Success ||
status === TaskStatus.Complete ||
status === TaskStatus.Redo;
const selectableTasks = arr.filter(
(
t: RequestWork & {
@ -108,11 +119,7 @@ function handleCheckAll() {
} | null;
taskStatus: TaskStatus;
},
) =>
t.taskStatus !== TaskStatus.Failed &&
t.taskStatus !== TaskStatus.Success &&
t.taskStatus !== TaskStatus.Complete &&
t.taskStatus !== TaskStatus.Redo,
) => !shouldExclude(t.taskStatus, props.validate),
);
if (selectedEmployee.value.length !== selectableTasks.length) {
@ -134,7 +141,7 @@ function handleCheck(
},
) {
if (
row.taskStatus === TaskStatus.Failed ||
(!props.validate && row.taskStatus === TaskStatus.Failed) ||
row.taskStatus === TaskStatus.Success ||
row.taskStatus === TaskStatus.Complete ||
row.taskStatus === TaskStatus.Redo ||
@ -191,12 +198,18 @@ function handleCheck(
:model-value="
selectedEmployee.length > 0 &&
selectedEmployee.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"
@ -213,6 +226,11 @@ function handleCheck(
<q-menu :offset="[0, 4]">
<q-list v-if="validate">
<q-item
v-if="
!selectedEmployee.some(
(e) => e.taskStatus === TaskStatus.Failed,
)
"
clickable
v-close-popup
class="items-center"
@ -336,7 +354,7 @@ function handleCheck(
@click="handleCheck(props.row)"
size="sm"
:disable="
props.row.taskStatus === TaskStatus.Failed ||
(!validate && props.row.taskStatus === TaskStatus.Failed) ||
props.row.taskStatus === TaskStatus.Success ||
props.row.taskStatus === TaskStatus.Complete ||
props.row.taskStatus === TaskStatus.Redo ||

View file

@ -65,7 +65,7 @@ const fileData = ref<
const refProductExpansion = ref<InstanceType<typeof ProductExpansion>>();
const taskProduct = ref<{ productId: string; discount?: number }[]>([]);
const view = ref<TaskOrderStatus>(TaskOrderStatus.Pending);
const taskStatusList = ref<
const taskStatusRecords = ref<
{
code?: string;
requestWorkId: string;
@ -86,6 +86,7 @@ const summaryPrice = computed(() => getPrice(taskListGroup.value));
const selectedEmployee = ref<
(RequestWork & {
taskStatus: TaskStatus;
_template?: {
id: string;
templateName: string;
@ -95,15 +96,6 @@ const selectedEmployee = ref<
})[][][]
>([]);
const failedDialog = ref(false);
const taskStatusRecords = ref<
{
requestWorkId: string;
step: number;
failedComment?: string;
failedType?: string;
code?: string;
}[]
>([]);
function getPrice(
list: {
@ -562,15 +554,18 @@ function openFailedDialog(
};
taskStatus: TaskStatus;
},
index: number,
) {
taskStatusList.value = [
const task = fullTaskOrder.value?.taskList.find(
(t) => t.requestWorkId === row.id,
);
taskStatusRecords.value = [
{
code: `${row.productService.product.code}-${row.request.code}`,
requestWorkId: row.id || '',
step: row._template?.step || 0,
failedComment: fullTaskOrder.value?.taskList[index].failedComment || '',
failedType: fullTaskOrder.value?.taskList[index].failedType || '',
failedComment: (task && task.failedComment) || '',
failedType: (task && task.failedType) || '',
},
];
pageState.failedDialog = true;
@ -955,8 +950,18 @@ watch([currentFormData.value.taskStatus], () => {
<TableEmployee
validate
step-on
:checkbox-on="view === TaskOrderStatus.Validate"
:check-all="view === TaskOrderStatus.Validate"
:checkbox-on="
view === TaskOrderStatus.Validate &&
fullTaskOrder?.userTask.find(
(l) => l.userId === v.responsibleUser.id,
)?.userTaskStatus === UserTaskStatus.Submit
"
:check-all="
view === TaskOrderStatus.Validate &&
fullTaskOrder?.userTask.find(
(l) => l.userId === v.responsibleUser.id,
)?.userTaskStatus === UserTaskStatus.Submit
"
:rows="list"
@change-all-status="
(v) =>
@ -975,16 +980,14 @@ watch([currentFormData.value.taskStatus], () => {
:no-action="view !== TaskOrderStatus.Validate"
type="order"
:readonly="
fullTaskOrder?.taskList[messengerIndex]
.taskStatus === TaskStatus.Pending
fullTaskOrder?.userTask.find(
(l) => l.userId === v.responsibleUser.id,
)?.userTaskStatus !== UserTaskStatus.Submit
"
:status="subProps.row.taskStatus"
@click-failed="
() => {
openFailedDialog(
subProps.row,
subProps.rowIndex,
);
openFailedDialog(subProps.row);
}
"
@change-status="
@ -1008,12 +1011,12 @@ watch([currentFormData.value.taskStatus], () => {
<FailRemarkDialog
readonly
:fail-task-option="list"
v-model:set-task-status-list="taskStatusList"
v-model:set-task-status-list="taskStatusRecords"
v-model:open="pageState.failedDialog"
@close="
() => {
pageState.failedDialog = false;
taskStatusList = [];
taskStatusRecords = [];
}
"
/>

View file

@ -619,17 +619,17 @@ watch([currentFormData.value.taskStatus], () => {
:status="subProps.row.taskStatus"
@click-failed="
() => {
const task = fullTaskOrder?.taskList.find(
(t) => t.requestWorkId === subProps.row.id,
);
taskStatusRecords = [
{
code: `${subProps.row.productService.product.code}-${subProps.row.request.code}`,
requestWorkId: subProps.row.id || '',
step: subProps.row._template?.step || 0,
failedComment:
fullTaskOrder?.taskList[subProps.rowIndex]
.failedComment || '',
failedType:
fullTaskOrder?.taskList[subProps.rowIndex]
.failedType || '',
(task && task.failedComment) || '',
failedType: (task && task.failedType) || '',
},
];
failedDialog = true;