feat: 添加数据纠错功能

This commit is contained in:
皓月归尘 2025-03-01 15:18:32 +08:00
parent 88ceb0f63b
commit ffdb1d07a3
9 changed files with 154 additions and 68 deletions

View File

@ -55,6 +55,7 @@ buttons:ForceToExit: Force Exit
buttons:DataAdmin: Data Admin buttons:DataAdmin: Data Admin
buttons:Audit: Audit buttons:Audit: Audit
buttons:Feedback: Feedback buttons:Feedback: Feedback
buttons:ErrorRecovery: Error Recovery
search:Total: Total search:Total: Total
search:History: History search:History: History
search:Collect: Collect search:Collect: Collect

View File

@ -55,6 +55,7 @@ buttons:ExitInBatches: 批量强退
buttons:DataAdmin: 数据管理 buttons:DataAdmin: 数据管理
buttons:Audit: 审核 buttons:Audit: 审核
buttons:Feedback: 反馈 buttons:Feedback: 反馈
buttons:ErrorRecovery: 纠错
search:Total: search:Total:
search:History: 搜索历史 search:History: 搜索历史
search:Collect: 收藏 search:Collect: 收藏

View File

@ -6,8 +6,8 @@
label-width="82px" label-width="82px"
> >
<el-row :gutter="30"> <el-row :gutter="30">
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="编码ID" prop="code_id"> <el-form-item label="编码ID" prop="code_id" label-width="120px">
<el-input <el-input
v-model="newFormInline.code_id" v-model="newFormInline.code_id"
placeholder="请输入编码ID~" placeholder="请输入编码ID~"
@ -17,22 +17,22 @@
/> />
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="当前编码" prop="code"> <el-form-item label="反馈编码" prop="code" label-width="120px">
<el-input <el-input
v-model="newFormInline.code" v-model="newFormInline.code"
placeholder="请输入当前编码~" placeholder="请输入反馈编码~"
clearable clearable
disabled disabled
class="w-full" class="w-full"
/> />
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="当前描述" prop="description"> <el-form-item label="编码描述" prop="description" label-width="120px">
<el-input <el-input
v-model="newFormInline.description" v-model="newFormInline.description"
placeholder="请输入当前编码描述~" placeholder="请输入编码描述~"
clearable clearable
disabled disabled
class="w-full" class="w-full"
@ -40,17 +40,25 @@
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col :value="24" :xm="24" :sm="24">
<el-form-item label="正确编码" prop="feedback_code"> <el-form-item
label="输入正确编码"
prop="feedback_code"
label-width="120px"
>
<el-input <el-input
v-model="newFormInline.feedback_code" v-model="newFormInline.feedback_code"
placeholder="请输入正确的编码描述~" placeholder="请输入正确的编码~"
clearable clearable
class="w-full" class="w-full"
/> />
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col :value="24" :xm="24" :sm="24">
<el-form-item label="正确描述" prop="feedback_description"> <el-form-item
label="输入正确描述"
prop="feedback_description"
label-width="120px"
>
<el-input <el-input
v-model="newFormInline.feedback_description" v-model="newFormInline.feedback_description"
placeholder="请输入正确的编码描述~" placeholder="请输入正确的编码描述~"
@ -69,6 +77,8 @@ import ReCol from "@/components/ReCol";
import type { FormRules } from "element-plus"; import type { FormRules } from "element-plus";
const ruleFormRef = ref(); const ruleFormRef = ref();
interface PropsInfo { interface PropsInfo {
/**方式 */
way: string;
/**编码ID */ /**编码ID */
code_id: string; code_id: string;
/**编码 */ /**编码 */
@ -90,11 +100,12 @@ const formRules = reactive<FormRules>({
{ required: true, message: "反馈编码为必填项", trigger: "blur" } { required: true, message: "反馈编码为必填项", trigger: "blur" }
], ],
feedback_description: [ feedback_description: [
{ required: true, message: "反馈描述为必填项", trigger: "blur" } { required: true, message: "反馈内容为必填项", trigger: "blur" }
] ]
}); });
const props = withDefaults(defineProps<ProsData>(), { const props = withDefaults(defineProps<ProsData>(), {
formInline: () => ({ formInline: () => ({
way: "反馈",
code_id: "", code_id: "",
code: "", code: "",
description: "", description: "",

View File

@ -170,11 +170,29 @@
type="primary" type="primary"
:size="size" :size="size"
:disabled="!hasAuth('code:btn:logInfo')" :disabled="!hasAuth('code:btn:logInfo')"
:icon="useRenderIcon(EditPen)" :icon="useRenderIcon(Info)"
@click="handleDetail(row)" @click="handleDetail(row)"
> >
{{ t("buttons:Details") }} {{ t("buttons:Details") }}
</el-button> </el-button>
<el-button
class="reset-margin"
link
type="warning"
:size="size"
:disabled="!hasAuth('code:btn:addFeedback')"
:icon="useRenderIcon(EditPen)"
@click="
handleFeedback(
'纠错',
row.result_text[0],
row.query_text,
row.result_text[0].code ?? ''
)
"
>
{{ t("buttons:ErrorRecovery") }}
</el-button>
</template> </template>
</pure-table> </pure-table>
</template> </template>
@ -215,7 +233,7 @@
class="w-full top-2" class="w-full top-2"
type="primary" type="primary"
:disabled="!hasAuth('code:btn:addFeedback')" :disabled="!hasAuth('code:btn:addFeedback')"
@click="handleFeedback(item)" @click="handleFeedback('反馈', item)"
>{{ t("buttons:Feedback") }}</el-button >{{ t("buttons:Feedback") }}</el-button
> >
</el-collapse-item> </el-collapse-item>
@ -238,6 +256,7 @@ import EditPen from "@iconify-icons/ep/edit-pen";
import Refresh from "@iconify-icons/ep/refresh"; import Refresh from "@iconify-icons/ep/refresh";
import UploadIcon from "@iconify-icons/ri/upload-2-line"; import UploadIcon from "@iconify-icons/ri/upload-2-line";
import Export from "@iconify-icons/ri/download-2-line"; import Export from "@iconify-icons/ri/download-2-line";
import Info from "@iconify-icons/ri/information-line";
const { t } = useI18n(); const { t } = useI18n();
import { hasAuth } from "@/utils/auth"; import { hasAuth } from "@/utils/auth";
/** /**

View File

@ -375,16 +375,24 @@ export const useIndex = (tableRef: Ref) => {
exportToExcel([exportData], "查询结果"); exportToExcel([exportData], "查询结果");
}; };
/**处理反馈 */ /**处理反馈 */
const handleFeedback = async (row: QueryResultItem) => { /**处理反馈 */
const handleFeedback = async (
way: string = "反馈",
row: QueryResultItem,
query_text?: string,
code?: string
) => {
addDialog({ addDialog({
title: `反馈错误`, title: way,
props: { props: {
formInline: { formInline: {
way: way,
code_id: row?.id ?? "", code_id: row?.id ?? "",
code: row?.code ?? "", code: row?.code ?? "",
description: row?.description ?? "", description: row?.description ?? "",
feedback_code: row?.code ?? "", feedback_code: way === "反馈" ? (row?.code ?? "") : code,
feedback_description: row?.description ?? "" feedback_description:
way === "反馈" ? (row?.description ?? "") : query_text
} }
}, },
width: "45%", width: "45%",
@ -394,26 +402,29 @@ export const useIndex = (tableRef: Ref) => {
contentRenderer: () => contentRenderer: () =>
h(editForm, { h(editForm, {
formInline: { formInline: {
way: way,
code_id: row?.id ?? "", code_id: row?.id ?? "",
code: row?.code ?? "", code: row?.code ?? "",
description: row?.description ?? "", description: row?.description ?? "",
feedback_code: row?.code ?? "", feedback_code: way === "反馈" ? (row?.code ?? "") : code,
feedback_description: row?.description ?? "" feedback_description:
way === "反馈" ? (row?.description ?? "") : query_text
}, },
ref: formRef ref: formRef
}), }),
beforeSure: async (done, {}) => { beforeSure: async (done, {}) => {
const FormData = formRef.value.newFormInline; const FormData = formRef.value.newFormInline;
let id = way === "反馈" ? (row?.id ?? "") : "";
const res = await postAddCodeFeedbackAPI({ const res = await postAddCodeFeedbackAPI({
code_id: row.id, code_id: id,
feedback_description: FormData.feedback_description, feedback_description: FormData.feedback_description,
feedback_code: FormData.feedback_code feedback_code: FormData.feedback_code
}); });
if (res.success) { if (res.success) {
message("反馈成功!", { type: "success" }); message(res.msg, { type: "success" });
done(); done();
} else { } else {
message("反馈失败!", { type: "error" }); message(res.msg, { type: "error" });
} }
} }
}); });

View File

@ -94,12 +94,30 @@
link link
type="primary" type="primary"
:size="size" :size="size"
:disabled="!hasAuth('code:btn:logInfo')" :disabled="!hasAuth('code:btn:addFeedback')"
:icon="useRenderIcon(EditPen)" :icon="useRenderIcon(EditPen)"
@click="handleDetail(row)" @click="handleDetail(row)"
> >
{{ t("buttons:Details") }} {{ t("buttons:Details") }}
</el-button> </el-button>
<el-button
class="reset-margin"
link
type="warning"
:size="size"
:disabled="!hasAuth('code:btn:addFeedback')"
:icon="useRenderIcon(Info)"
@click="
handleFeedback(
'纠错',
row.result_text[0],
row.query_text,
row.result_text[0].code ?? ''
)
"
>
{{ t("buttons:ErrorRecovery") }}
</el-button>
</template> </template>
</pure-table> </pure-table>
</template> </template>
@ -140,7 +158,7 @@
class="w-full top-2" class="w-full top-2"
type="primary" type="primary"
:disabled="!hasAuth('code:btn:addFeedback')" :disabled="!hasAuth('code:btn:addFeedback')"
@click="handleFeedback(item)" @click="handleFeedback('反馈', item)"
>{{ t("buttons:Feedback") }}</el-button >{{ t("buttons:Feedback") }}</el-button
> >
</el-collapse-item> </el-collapse-item>
@ -164,6 +182,7 @@ import { PureTableBar } from "@/components/RePureTableBar";
import { useRenderIcon } from "@/components/ReIcon/src/hooks"; import { useRenderIcon } from "@/components/ReIcon/src/hooks";
import EditPen from "@iconify-icons/ep/edit-pen"; import EditPen from "@iconify-icons/ep/edit-pen";
import Export from "@iconify-icons/ri/download-2-line"; import Export from "@iconify-icons/ri/download-2-line";
import Info from "@iconify-icons/ri/information-line";
import type { import type {
QueryCodeLogInfo, QueryCodeLogInfo,
QueryResult, QueryResult,
@ -174,34 +193,36 @@ import { PaginationProps } from "@pureadmin/table";
import { message } from "@/utils/message"; import { message } from "@/utils/message";
import { hasAuth } from "@/utils/auth"; import { hasAuth } from "@/utils/auth";
import { addDialog } from "@/components/ReDialog"; import { addDialog } from "@/components/ReDialog";
//import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
//import { $t } from "@/plugins/i18n";
const { t } = useI18n(); const { t } = useI18n();
const route = useRoute(); const route = useRoute();
const router = useRouter(); //const router = useRouter();
const getParameter = isEmpty(route.params) ? route.query : route.params; const getParameter = isEmpty(route.params) ? route.query : route.params;
// /** */ // /** */
// function init() { //function init() {
// Object.keys(getParameter).forEach(param => { // Object.keys(getParameter).forEach(param => {
// if (!isString(getParameter[param])) { // if (!isString(getParameter[param])) {
// getParameter[param] = getParameter[param].toString(); // getParameter[param] = getParameter[param].toString();
// } else { // } else {
// getParameter["detailsId"] = ""; // getParameter["detailsId"] = "";
// } // }
// }); // });
// useMultiTagsStoreHook().handleTags("push", { // useMultiTagsStoreHook().handleTags("push", {
// path: "/code/log/details/:detailsId", // path: "/code/log/details/:detailsId",
// name: "QueryCodedetails", // name: "QueryCodedetails",
// params: getParameter, // params: getParameter,
// meta: { // meta: {
// title: $t("menus:QueryCodedetails") // title: $t("menus:QueryCodedetails")
// }, // },
// dynamicLevel: 1 // dynamicLevel: 1
// }); // });
// router.push({ // router.push({
// name: "QueryCodedetails", // name: "QueryCodedetails",
// params: getParameter // params: getParameter
// }); // });
// } //}
// init(); //init();
const activeCollapse = ref(["baseInfo"]); const activeCollapse = ref(["baseInfo"]);
/** /**
* 查询结果 * 查询结果
@ -414,16 +435,23 @@ const onbatchExport = async () => {
exportToExcel([exportData], "查询结果"); exportToExcel([exportData], "查询结果");
}; };
/**处理反馈 */ /**处理反馈 */
const handleFeedback = async (row: QueryResultItem) => { const handleFeedback = async (
way: string = "反馈",
row: QueryResultItem,
query_text?: string,
code?: string
) => {
addDialog({ addDialog({
title: `反馈错误`, title: way,
props: { props: {
formInline: { formInline: {
way: way,
code_id: row?.id ?? "", code_id: row?.id ?? "",
code: row?.code ?? "", code: row?.code ?? "",
description: row?.description ?? "", description: row?.description ?? "",
feedback_code: row?.code ?? "", feedback_code: way === "反馈" ? (row?.code ?? "") : code,
feedback_description: row?.description ?? "" feedback_description:
way === "反馈" ? (row?.description ?? "") : query_text
} }
}, },
width: "45%", width: "45%",
@ -433,26 +461,29 @@ const handleFeedback = async (row: QueryResultItem) => {
contentRenderer: () => contentRenderer: () =>
h(editForm, { h(editForm, {
formInline: { formInline: {
way: way,
code_id: row?.id ?? "", code_id: row?.id ?? "",
code: row?.code ?? "", code: row?.code ?? "",
description: row?.description ?? "", description: row?.description ?? "",
feedback_code: row?.code ?? "", feedback_code: way === "反馈" ? (row?.code ?? "") : code,
feedback_description: row?.description ?? "" feedback_description:
way === "反馈" ? (row?.description ?? "") : query_text
}, },
ref: formRef ref: formRef
}), }),
beforeSure: async (done, {}) => { beforeSure: async (done, {}) => {
const FormData = formRef.value.newFormInline; const FormData = formRef.value.newFormInline;
let id = way === "反馈" ? (row?.id ?? "") : "";
const res = await postAddCodeFeedbackAPI({ const res = await postAddCodeFeedbackAPI({
code_id: row.id, code_id: id,
feedback_description: FormData.feedback_description, feedback_description: FormData.feedback_description,
feedback_code: FormData.feedback_code feedback_code: FormData.feedback_code
}); });
if (res.success) { if (res.success) {
message("反馈成功!", { type: "success" }); message(res.msg, { type: "success" });
done(); done();
} else { } else {
message("反馈失败!", { type: "error" }); message(res.msg, { type: "error" });
} }
} }
}); });

View File

@ -6,8 +6,8 @@
label-width="82px" label-width="82px"
> >
<el-row :gutter="30"> <el-row :gutter="30">
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="编码ID" prop="code_id"> <el-form-item label="编码ID" prop="code_id" label-width="120px">
<el-input <el-input
v-model="newFormInline.code_id" v-model="newFormInline.code_id"
placeholder="请输入编码ID~" placeholder="请输入编码ID~"
@ -17,8 +17,8 @@
/> />
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="反馈编码" prop="code"> <el-form-item label="反馈编码" prop="code" label-width="120px">
<el-input <el-input
v-model="newFormInline.code" v-model="newFormInline.code"
placeholder="请输入反馈编码~" placeholder="请输入反馈编码~"
@ -28,8 +28,8 @@
/> />
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col v-if="newFormInline.way !== '纠错'" :value="24" :xm="24" :sm="24">
<el-form-item label="编码描述" prop="description"> <el-form-item label="编码描述" prop="description" label-width="120px">
<el-input <el-input
v-model="newFormInline.description" v-model="newFormInline.description"
placeholder="请输入编码描述~" placeholder="请输入编码描述~"
@ -40,7 +40,11 @@
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col :value="24" :xm="24" :sm="24">
<el-form-item label="正确编码" prop="feedback_code"> <el-form-item
label="输入正确编码"
prop="feedback_code"
label-width="120px"
>
<el-input <el-input
v-model="newFormInline.feedback_code" v-model="newFormInline.feedback_code"
placeholder="请输入正确的编码~" placeholder="请输入正确的编码~"
@ -50,7 +54,11 @@
</el-form-item> </el-form-item>
</re-col> </re-col>
<re-col :value="24" :xm="24" :sm="24"> <re-col :value="24" :xm="24" :sm="24">
<el-form-item label="正确描述" prop="feedback_description"> <el-form-item
label="输入正确描述"
prop="feedback_description"
label-width="120px"
>
<el-input <el-input
v-model="newFormInline.feedback_description" v-model="newFormInline.feedback_description"
placeholder="请输入正确的编码描述~" placeholder="请输入正确的编码描述~"
@ -69,6 +77,8 @@ import ReCol from "@/components/ReCol";
import type { FormRules } from "element-plus"; import type { FormRules } from "element-plus";
const ruleFormRef = ref(); const ruleFormRef = ref();
interface PropsInfo { interface PropsInfo {
/**方式 */
way: string;
/**编码ID */ /**编码ID */
code_id: string; code_id: string;
/**编码 */ /**编码 */
@ -95,6 +105,7 @@ const formRules = reactive<FormRules>({
}); });
const props = withDefaults(defineProps<ProsData>(), { const props = withDefaults(defineProps<ProsData>(), {
formInline: () => ({ formInline: () => ({
way: "反馈",
code_id: "", code_id: "",
code: "", code: "",
description: "", description: "",

View File

@ -111,7 +111,8 @@ export const useCode = (tableRef: Ref) => {
{ {
label: "编码", label: "编码",
prop: "code", prop: "code",
formatter: ({ code }) => code.replace(/(\d{2})/g, "$1.").slice(0, -1) formatter: ({ code }) =>
code ? code.replace(/(\d{2})/g, "$1.").slice(0, -1) : ""
}, },
{ {
label: "描述", label: "描述",

View File

@ -62,7 +62,7 @@ export const useCode = (tableRef: Ref) => {
pageSize: 10, pageSize: 10,
currentPage: 1, currentPage: 1,
background: true, background: true,
pageSizes: [10, 20, 30, 40, 50] pageSizes: [10, 20, 30, 40, 50, 100, 200, 300]
}); });
// 上传文件区域显示状态 // 上传文件区域显示状态
const showUploadArea = ref(false); const showUploadArea = ref(false);