|
@@ -1,5 +1,5 @@
|
|
|
<template>
|
|
|
- <el-dialog v-model="state.dialogVisible" :title="dialogTitle" draggable ref="dialogRef" width="50%" append-to-body destroy-on-close @close="close">
|
|
|
+ <el-dialog v-model="state.dialogVisible" :title="dialogTitle" draggable ref="dialogRef" width="50%" append-to-body destroy-on-close @close="close" @opened="opened">
|
|
|
<el-form :model="state.ruleForm" ref="ruleFormRef" label-width="110px">
|
|
|
<el-row :gutter="10">
|
|
|
<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
|
|
@@ -37,19 +37,26 @@
|
|
|
<div class="mt20 mb20">
|
|
|
<el-button type="primary" class="mb10" @click="onAddItem" v-if="!viewMode">新增扣分项</el-button>
|
|
|
<!-- 表格 -->
|
|
|
- <el-table :data="tableData" border row-key="name">
|
|
|
+ <el-table :data="tableData" border row-key="name" ref="multipleTableRef" @selection-change="handleSelectionChange">
|
|
|
+ <el-table-column type="selection" width="55" align="center" :reserve-selection="true" :selectable="selectable"/>
|
|
|
<el-table-column label="扣分时间点" show-overflow-tooltip align="center">
|
|
|
<template #default="{ row }">
|
|
|
{{ formatDuration(row.second, false) }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="name" label="扣分项" show-overflow-tooltip align="center"></el-table-column>
|
|
|
+ <el-table-column label="质检类型" show-overflow-tooltip align="center">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <span> {{ row.intelligent ? '智能质检' : '人工质检' }}</span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column prop="content" label="扣分内容" show-overflow-tooltip align="center"></el-table-column>
|
|
|
<el-table-column prop="grade" label="分值(分)" show-overflow-tooltip align="center"></el-table-column>
|
|
|
<el-table-column label="操作" width="120" fixed="right" align="center" v-if="!viewMode">
|
|
|
<template #default="{ row }">
|
|
|
- <el-button link type="primary" @click="onEditItem(row)"> 编辑 </el-button>
|
|
|
- <el-button link type="primary" @click="onDeleteItem(row)"> 删除 </el-button>
|
|
|
+ <!-- 智能质检不能编辑就和删除 -->
|
|
|
+ <el-button link type="primary" @click="onEditItem(row)" v-if="!row.intelligent"> 编辑 </el-button>
|
|
|
+ <el-button link type="primary" @click="onDeleteItem(row)" v-if="!row.intelligent"> 删除 </el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -62,7 +69,7 @@
|
|
|
<el-form-item label="当前质检得分:"> {{ score }} </el-form-item>
|
|
|
</el-col>
|
|
|
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
|
|
|
- <el-form-item label="质检评价:" prop="content" :rules="[{ required: true, message: '请输入质检评价', trigger: 'blur' }]">
|
|
|
+ <el-form-item label="质检评价:" prop="content" :rules="[{ required: false, message: '请输入质检评价', trigger: 'blur' }]">
|
|
|
<el-input
|
|
|
v-model="state.ruleForm.content"
|
|
|
placeholder="请输入质检评价"
|
|
@@ -163,10 +170,12 @@ const qualityId = ref<string>(''); // 质检ID
|
|
|
const viewMode = ref<boolean>(false); // 是否查看
|
|
|
// 打开弹窗
|
|
|
const openDialog = async (row: any, source: string | number | undefined, isView?: boolean) => {
|
|
|
+ score.value = 100;
|
|
|
try {
|
|
|
const { result } = await qualityDetail(row.id);
|
|
|
state.ruleForm = result ?? {};
|
|
|
tableData.value = result.qualityDetails ?? [];
|
|
|
+ multipleSelection.value = tableData.value.filter((v: any) => v.check === true);
|
|
|
state.orderDetail = row.order ?? {};
|
|
|
qualityId.value = row.id;
|
|
|
state.source = source;
|
|
@@ -189,16 +198,39 @@ const openDialog = async (row: any, source: string | number | undefined, isView?
|
|
|
console.log(e);
|
|
|
}
|
|
|
};
|
|
|
+const opened = () => {
|
|
|
+ // 回显选中表格
|
|
|
+ if (state.dialogVisible) {
|
|
|
+ multipleSelection.value.forEach((v: any) => {
|
|
|
+ multipleTableRef.value?.toggleRowSelection(v, true);
|
|
|
+ });
|
|
|
+ }
|
|
|
+};
|
|
|
+// 表格多选
|
|
|
+const multipleTableRef = ref<RefType>();
|
|
|
+const multipleSelection = ref<EmptyArrayType>([]);
|
|
|
+const handleSelectionChange = (val: any[]) => {
|
|
|
+ multipleSelection.value = val;
|
|
|
+ multipleSelection.value.forEach((v: any) => {
|
|
|
+ v.check = true;
|
|
|
+ });
|
|
|
+};
|
|
|
+// 是否可选
|
|
|
+const selectable = () => {
|
|
|
+ return !viewMode.value;
|
|
|
+};
|
|
|
// 计算当前得分
|
|
|
-const score = computed(() => {
|
|
|
- let score = 0;
|
|
|
- if (tableData.value.length) {
|
|
|
- tableData.value.forEach((v: any) => {
|
|
|
- score += v.grade;
|
|
|
- });
|
|
|
- }
|
|
|
- return 100 - score;
|
|
|
-});
|
|
|
+const score = ref(100);
|
|
|
+watch(
|
|
|
+ () => multipleSelection.value,
|
|
|
+ (newVal) => {
|
|
|
+ let total = 100;
|
|
|
+ for (let i of newVal) {
|
|
|
+ total -= i.grade;
|
|
|
+ }
|
|
|
+ score.value = total;
|
|
|
+ }
|
|
|
+);
|
|
|
watch(
|
|
|
() => score.value,
|
|
|
(newVal) => {
|
|
@@ -322,6 +354,16 @@ const onSubmit = (formEl: FormInstance | undefined) => {
|
|
|
if (!formEl) return;
|
|
|
formEl.validate((valid: boolean) => {
|
|
|
if (!valid) return;
|
|
|
+ if (score.value <= 0) {
|
|
|
+ ElMessage.warning('质检得分不能小于0分');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ const qualityDetails = tableData.value.map((v: any) => {
|
|
|
+ return {
|
|
|
+ ...v,
|
|
|
+ check: multipleSelection.value.includes(v),
|
|
|
+ };
|
|
|
+ });
|
|
|
state.loading = true;
|
|
|
const request = {
|
|
|
orderId: state.orderDetail.id, // 工单id
|
|
@@ -329,7 +371,7 @@ const onSubmit = (formEl: FormInstance | undefined) => {
|
|
|
grade: score.value, // 质检得分
|
|
|
content: state.ruleForm.content, // 质检评价
|
|
|
source: state.source, // 来源
|
|
|
- qualityDetails: tableData.value, // 质检详情
|
|
|
+ qualityDetails: qualityDetails, // 质检详情
|
|
|
id: qualityId.value, // 质检id
|
|
|
};
|
|
|
qualityUpdate(request)
|