feat: enhance task status handling and validation in TableEmployee & fail comment
This commit is contained in:
parent
cce1eccf8c
commit
c64af9d992
3 changed files with 63 additions and 42 deletions
|
|
@ -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 ||
|
||||||
|
|
|
||||||
|
|
@ -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 = [];
|
||||||
}
|
}
|
||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue