Bladeren bron

reactor:对接自贡质检;

zhangchong 3 maanden geleden
bovenliggende
commit
b3a740cad8
2 gewijzigde bestanden met toevoegingen van 120 en 8 verwijderingen
  1. 11 0
      src/api/quality/index.ts
  2. 109 8
      src/views/quality/index/components/ZG-quality.vue

+ 11 - 0
src/api/quality/index.ts

@@ -66,6 +66,17 @@ export const qualityRecordTransfer = (data: object) => {
 		data,
 	});
 };
+/**
+ * @description 更新质检内容
+ * @param data
+ */
+export const qualityContentUpdate = (data: object) => {
+	return request({
+		url: `/api/v1/Quality/transfer`,
+		method: 'put',
+		data,
+	});
+};
 /**
  * @description 导出质检单
  * @param data

+ 109 - 8
src/views/quality/index/components/ZG-quality.vue

@@ -11,7 +11,7 @@
 		@opened="opened"
 	>
 		<splitpanes Vertical>
-			<pane min-size="60" max-size="60" size="60" style="max-height: calc(80vh - 111px); overflow-y: auto">
+			<pane min-size="60" max-size="60" size="60" style="max-height: calc(84vh - 111px); overflow-y: auto">
 				<p class="border-title mb10">工单详情</p>
 				<el-form :model="state.orderDetail" label-width="90px" v-loading="state.loading" class="show-info-form">
 					<el-row :gutter="10">
@@ -106,15 +106,47 @@
 				<!-- 受理质检才有质检录音撰写 -->
 				<template v-if="state.source === 1">
 					<p class="border-title mb10 mt20">录音转写</p>
-          <!-- 未转写 -->
+					<!-- 未转写 -->
 					<template v-if="!state.qualityDetail.transferState">
 						<el-empty description="无录音转写内容" :image-size="100" style="padding: 0">
 							<el-button type="primary" @click="onTransfer">录音转写</el-button>
 						</el-empty>
 					</template>
-          <!-- 转写中 -->
+					<!-- 转写中 -->
 					<el-empty description="录音转写中,请稍后" :image-size="100" style="padding: 0" v-if="state.qualityDetail.transferState === 1"> </el-empty>
-          <!-- 转写完成 -->
+					<!-- 转写完成 -->
+					<template v-if="state.qualityDetail.transferState === 2">
+						<template v-if="transformContent && transformContent.length">
+              <template v-if="editMode">
+                <el-scrollbar class="transfer-content" v-loading="contentLoading">
+                  <div v-for="(item, index) in transformContent" :key="index" class="transfer-content-item">
+                    <div>
+										<span>{{ item.type === 0 ? '坐席:' : '市民:' }}</span
+                    ><el-input v-model="item.reviseContent"></el-input>
+                    </div>
+                  </div>
+                </el-scrollbar>
+                <el-button type="primary" @click="saveTransferContent" class="ml20">保存并应用</el-button>
+              </template>
+              <template v-else>
+                <el-scrollbar class="transfer-content" v-loading="contentLoading">
+                  <div v-for="(item, index) in transformContent" :key="index" class="transfer-content-item">
+                    <div>
+                      <span>{{ item.type === 0 ? '坐席:' : '市民:' }}</span>
+                      <div v-html="showKeyWord(item.reviseContent, item.prohibited)" class="formatted-text"></div>
+                    </div>
+                  </div>
+                </el-scrollbar>
+                <el-button type="primary" @click="editTransferContent" class="ml20">编辑转写内容</el-button>
+              </template>
+            </template>
+            <el-empty description="无录音转写内容" :image-size="100" style="padding: 0" v-else>
+            </el-empty>
+					</template>
+					<!-- 转写失败 -->
+					<template v-if="state.qualityDetail.transferState === 3">
+						<el-empty description="录音转写失败" :image-size="100" style="padding: 0"> </el-empty>
+					</template>
 				</template>
 			</pane>
 			<pane style="max-height: calc(80vh - 111px); overflow-y: auto">
@@ -209,7 +241,7 @@ import { ElMessage, ElMessageBox, FormInstance } from 'element-plus';
 import { formatDate, formatDuration } from '@/utils/formatTime';
 import { templateList } from '@/api/quality/template';
 import Other from '@/utils/other';
-import { qualityUpdate, qualityDetail, qualityRecordTransfer } from '@/api/quality';
+import { qualityUpdate, qualityDetail, qualityRecordTransfer, qualityContentUpdate } from '@/api/quality';
 import { useThemeConfig } from '@/stores/themeConfig';
 import { storeToRefs } from 'pinia';
 import { useUserInfo } from '@/stores/userInfo';
@@ -255,6 +287,10 @@ const openDialog = (row: any, source?: string | number | undefined) => {
 	getQualityDetail(row.id, source);
 };
 // 获取质检详情
+// 转写内容
+const transformContent = ref<EmptyArrayType>([]);
+// 编辑模式
+const editMode = ref<boolean>(false);
 const getQualityDetail = async (id: string, source?: string | number | undefined) => {
 	try {
 		if (source) {
@@ -269,6 +305,7 @@ const getQualityDetail = async (id: string, source?: string | number | undefined
 			multipleSelection.value = tableData.value.filter((v: any) => v.check === true);
 			state.orderDetail = qualityRes.result?.order ?? {};
 			state.visit = qualityRes.result?.visit ?? {};
+			transformContent.value = Other.deepClone(qualityRes.result.transfer);
 			state.loading = false;
 			switch (source) {
 				case 1:
@@ -391,12 +428,12 @@ const onTransfer = () => {
 		autofocus: false,
 	})
 		.then(() => {
-      state.loading = true;
-			qualityRecordTransfer([{id:qualityId.value}])
+			state.loading = true;
+			qualityRecordTransfer([{ id: qualityId.value }])
 				.then(() => {
 					ElMessage.success('转写任务创建成功');
 					getQualityDetail(qualityId.value, state.source);
-          emit('updateList');
+					emit('updateList');
 				})
 				.catch((err) => {
 					console.log(err);
@@ -465,6 +502,47 @@ const getEnableAcceptType = () => {
 		});
 	}
 };
+// 高亮关键词
+const showKeyWord = (val: string[], keywordString: string) => {
+	if (!keywordString) return val;
+	console.log(keywordString, '111');
+	const keywordArr = keywordString.split(':');
+	console.log(keywordArr, '1111');
+	let str: any = val;
+	if (keywordArr && keywordArr.length) {
+		// 2.定制关键词对应正则
+		keywordArr.forEach((e) => {
+			let regStr = '' + `(${e})`;
+			let reg = new RegExp(regStr, 'g');
+			// 3.正则替换,关键词飘红
+			str = str.replace(reg, '<span class="color-danger font-bold"">' + e + '</span>');
+		});
+	}
+	return str;
+};
+// 编辑转写内容
+const editTransferContent = () => {
+	editMode.value = !editMode.value;
+};
+// 修改录音转写内容保存
+const contentLoading = ref(false);
+const saveTransferContent = () => {
+	const request = {
+		id: qualityId.value,
+		transfer: transformContent.value,
+	};
+  contentLoading.value = true;
+	qualityContentUpdate(request)
+		.then(() => {
+			ElMessage.success('保存成功');
+			editMode.value = !editMode.value;
+      contentLoading.value = false;
+		})
+		.catch((err) => {
+			console.log(err);
+      contentLoading.value = false;
+		});
+};
 // 保存
 const onSubmit = (formEl: FormInstance | undefined) => {
 	if (!formEl) return;
@@ -509,3 +587,26 @@ defineExpose({
 	closeDialog,
 });
 </script>
+<style scoped lang="scss">
+.transfer-content {
+	border: var(--el-border);
+	padding: 10px;
+	margin: 10px 20px;
+	max-height: 300px;
+	overflow: auto;
+	&-item {
+		margin-bottom: 5px;
+		div {
+			display: flex;
+			align-items: center;
+			width: 100%;
+			span {
+				width: 50px;
+			}
+		}
+		&:last-child {
+			margin-bottom: 0;
+		}
+	}
+}
+</style>