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

View file

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

View file

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