Parcourir la source

reactor:质检调整;

zhangchong il y a 1 an
Parent
commit
1020e3d487

+ 57 - 15
src/views/quality/done/components/Quality-inspection.vue

@@ -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)

+ 51 - 15
src/views/quality/index/components/Quality-inspection.vue

@@ -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">
@@ -47,20 +47,26 @@
 			<div class="mt20 mb20">
 				<el-button type="primary" class="mb10" @click="onAddItem">新增扣分项</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" />
 					<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">
 						<template #default="{ row }">
-              <!-- 智能质检不能编辑 -->
+							<!-- 智能质检不能编辑就和删除 -->
 							<el-button link type="primary" @click="onEditItem(row)" v-if="!row.intelligent"> 编辑 </el-button>
-							<el-button link type="primary" @click="onDeleteItem(row)"> 删除 </el-button>
+							<el-button link type="primary" @click="onDeleteItem(row)" v-if="!row.intelligent"> 删除 </el-button>
 						</template>
 					</el-table-column>
 				</el-table>
@@ -73,7 +79,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="请输入质检评价"
@@ -178,6 +184,7 @@ const qualityId = ref<string>(''); // 质检ID
 // 打开弹窗
 const openDialog = async (row: any, source?: string | number | undefined) => {
 	qualityId.value = row.id;
+	score.value = 100;
 	if (source) {
 		state.source = source;
 		const [temRes, qualityRes] = await Promise.all([
@@ -186,6 +193,7 @@ const openDialog = async (row: any, source?: string | number | undefined) => {
 		]);
 		projectArray.value = temRes.result?.items[0]?.templateDetails ?? [];
 		tableData.value = qualityRes.result?.qualityDetails ?? [];
+    multipleSelection.value = tableData.value.filter((v: any) => v.check === true);
 		state.orderDetail = qualityRes.result?.order ?? {};
 		state.visit = qualityRes.result?.visit ?? {};
 		switch (source) {
@@ -200,19 +208,37 @@ const openDialog = async (row: any, source?: string | number | undefined) => {
 				break;
 		}
 	}
-
 	state.dialogVisible = true;
 };
+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 score = computed(() => {
-	let score = 0;
-	if (tableData.value.length) {
-		tableData.value.forEach((v: any) => {
-			score += v.grade;
-		});
+const score = ref(100);
+watch(
+	() => multipleSelection.value,
+	(newVal) => {
+		let total = 100;
+		for (let i of newVal) {
+			total -= i.grade;
+		}
+		score.value = total;
 	}
-	return 100 - score;
-});
+);
 watch(
 	() => score.value,
 	(newVal) => {
@@ -337,6 +363,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
@@ -344,7 +380,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)