This commit is contained in:
吴红兵
2026-03-07 12:35:45 +08:00
parent 271710e870
commit b997b3ba48
423 changed files with 79612 additions and 91574 deletions

View File

@@ -1,33 +1,24 @@
<template>
<transition name="el-zoom-in-center">
<div
v-show="isShow"
class="el-dropdown__popper el-popper is-light is-pure custom-contextmenu"
:style="`top: ${y}px; left: ${x}px;`"
>
<ul class="el-dropdown-menu">
<li
v-for="item in menuItems"
:key="item.text"
class="el-dropdown-menu__item"
@click="handleItemClick(item)"
>
<el-icon><component :is="item.icon" /></el-icon>
<span>{{ item.text }}</span>
</li>
</ul>
<div class="el-popper__arrow" :style="{ left: '10px' }"></div>
</div>
</transition>
<transition name="el-zoom-in-center">
<div v-show="isShow" class="el-dropdown__popper el-popper is-light is-pure custom-contextmenu" :style="`top: ${y}px; left: ${x}px;`">
<ul class="el-dropdown-menu">
<li v-for="item in menuItems" :key="item.text" class="el-dropdown-menu__item" @click="handleItemClick(item)">
<el-icon><component :is="item.icon" /></el-icon>
<span>{{ item.text }}</span>
</li>
</ul>
<div class="el-popper__arrow" :style="{ left: '10px' }"></div>
</div>
</transition>
</template>
<script setup>
import { ref, defineProps, defineEmits } from 'vue';
const props = defineProps({
x: Number,
y: Number,
menuItems: Array,
x: Number,
y: Number,
menuItems: Array,
});
const emit = defineEmits(['itemClick', 'close']);
@@ -35,16 +26,16 @@ const emit = defineEmits(['itemClick', 'close']);
const isShow = ref(false);
const handleItemClick = (item) => {
emit('itemClick', item);
isShow.value = false;
emit('itemClick', item);
isShow.value = false;
};
const show = () => {
isShow.value = true;
isShow.value = true;
};
const hide = () => {
isShow.value = false;
isShow.value = false;
};
defineExpose({ show, hide });
@@ -52,28 +43,28 @@ defineExpose({ show, hide });
<style scoped>
.custom-contextmenu {
position: fixed;
z-index: 2190;
min-width: 120px;
background-color: #fff;
border: 1px solid #e4e7ed;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
position: fixed;
z-index: 2190;
min-width: 120px;
background-color: #fff;
border: 1px solid #e4e7ed;
border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
}
.el-dropdown-menu__item {
font-size: 14px;
padding: 8px 16px;
cursor: pointer;
display: flex;
align-items: center;
font-size: 14px;
padding: 8px 16px;
cursor: pointer;
display: flex;
align-items: center;
}
.el-dropdown-menu__item:hover {
background-color: #f5f7fa;
background-color: #f5f7fa;
}
.el-icon {
margin-right: 8px;
margin-right: 8px;
}
</style>
</style>

View File

@@ -1,38 +1,28 @@
<template>
<el-dialog
v-model="dialogVisible"
title="标记信息"
width="30%"
:close-on-click-modal="false"
>
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item prop="name" label="字段名" :label-width="formLabelWidth">
<el-input v-model="form.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item prop="description" label="字段描述" :label-width="formLabelWidth">
<el-input
v-model="form.description"
type="textarea"
:rows="4"
placeholder="请输入描述"
></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</span>
</template>
</el-dialog>
<el-dialog v-model="dialogVisible" title="标记信息" width="30%" :close-on-click-modal="false">
<el-form :model="form" :rules="rules" ref="formRef">
<el-form-item prop="name" label="字段名" :label-width="formLabelWidth">
<el-input v-model="form.name" autocomplete="off"></el-input>
</el-form-item>
<el-form-item prop="description" label="字段描述" :label-width="formLabelWidth">
<el-input v-model="form.description" type="textarea" :rows="4" placeholder="请输入描述"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="closeDialog">取消</el-button>
<el-button type="primary" @click="submitForm">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup>
import {rule} from "/@/utils/validate";
import { rule } from '/@/utils/validate';
const props = defineProps({
initialName: String,
initialDescription: String,
initialName: String,
initialDescription: String,
});
const emit = defineEmits(['submit', 'close']);
@@ -40,45 +30,45 @@ const emit = defineEmits(['submit', 'close']);
const dialogVisible = ref(false);
const formRef = ref(null);
const form = reactive({
name: props.initialName || '',
description: props.initialDescription || ''
name: props.initialName || '',
description: props.initialDescription || '',
});
const rules = {
name: [
{required: true, message: '请输入属性名', trigger: 'blur'},
{validator: rule.overLength, trigger: 'blur'},
{validator: rule.validatorLowercase, trigger: 'blur'}
],
description: [
{required: true, message: '请输入描述', trigger: 'blur'},
{validator: rule.overLength, trigger: 'blur'},
]
name: [
{ required: true, message: '请输入属性名', trigger: 'blur' },
{ validator: rule.overLength, trigger: 'blur' },
{ validator: rule.validatorLowercase, trigger: 'blur' },
],
description: [
{ required: true, message: '请输入描述', trigger: 'blur' },
{ validator: rule.overLength, trigger: 'blur' },
],
};
const formLabelWidth = '80px';
const submitForm = () => {
formRef.value.validate((valid) => {
if (valid) {
emit('submit', {name: form.name, description: form.description});
closeDialog();
} else {
return false;
}
});
formRef.value.validate((valid) => {
if (valid) {
emit('submit', { name: form.name, description: form.description });
closeDialog();
} else {
return false;
}
});
};
const closeDialog = () => {
dialogVisible.value = false;
emit('close');
dialogVisible.value = false;
emit('close');
};
const showDialog = (name, description) => {
form.name = name || '';
form.description = description || '';
dialogVisible.value = true;
form.name = name || '';
form.description = description || '';
dialogVisible.value = true;
};
defineExpose({showDialog});
defineExpose({ showDialog });
</script>

View File

@@ -1,110 +1,108 @@
<template>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible"
:close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-form-item label="标题" prop="ocrTitle">
<el-input v-model="form.ocrTitle" placeholder="请输入标题"/>
</el-form-item>
<el-dialog :title="form.id ? '编辑' : '新增'" v-model="visible" :close-on-click-modal="false" draggable>
<el-form ref="dataFormRef" :model="form" :rules="dataRules" formDialogRef label-width="90px" v-loading="loading">
<el-form-item label="标题" prop="ocrTitle">
<el-input v-model="form.ocrTitle" placeholder="请输入标题" />
</el-form-item>
<el-form-item label="描述" prop="ocrPrompt">
<el-input type="textarea" :rows="5" v-model="form.ocrPrompt" placeholder="请输入描述提示词"/>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading"> </el-button>
</span>
</template>
</el-dialog>
<el-form-item label="描述" prop="ocrPrompt">
<el-input type="textarea" :rows="5" v-model="form.ocrPrompt" placeholder="请输入描述提示词" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="onSubmit" :disabled="loading"> </el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts" name="AiOcrConfDialog">
import {useDict} from '/@/hooks/dict';
import {useMessage} from "/@/hooks/message";
import {getObj, addObj, putObj, validateExist} from '/@/api/knowledge/ocr'
import {rule} from '/@/utils/validate';
import { useDict } from '/@/hooks/dict';
import { useMessage } from '/@/hooks/message';
import { getObj, addObj, putObj, validateExist } from '/@/api/knowledge/ocr';
import { rule } from '/@/utils/validate';
const emit = defineEmits(['refresh']);
// 定义变量内容
const dataFormRef = ref();
const visible = ref(false)
const loading = ref(false)
const visible = ref(false);
const loading = ref(false);
// 定义字典
// 提交表单数据
const form = reactive({
id: '',
ocrTitle: '',
ocrPrompt: '',
imageResource: '',
ocrMarked: '',
id: '',
ocrTitle: '',
ocrPrompt: '',
imageResource: '',
ocrMarked: '',
});
// 定义校验规则
const dataRules = {
ocrTitle: [
{required: true, message: '请输入功能名称', trigger: 'blur'},
{validator: rule.overLength, trigger: 'blur'}
],
ocrPrompt: [
{required: true, message: '请输入提示词描述', trigger: 'blur'},
{validator: rule.overLength, trigger: 'blur'},
]
ocrTitle: [
{ required: true, message: '请输入功能名称', trigger: 'blur' },
{ validator: rule.overLength, trigger: 'blur' },
],
ocrPrompt: [
{ required: true, message: '请输入提示词描述', trigger: 'blur' },
{ validator: rule.overLength, trigger: 'blur' },
],
};
// 打开弹窗
const openDialog = (id: string) => {
visible.value = true
form.id = ''
visible.value = true;
form.id = '';
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 重置表单数据
nextTick(() => {
dataFormRef.value?.resetFields();
});
// 获取aiOcrConf信息
if (id) {
form.id = id
getAiOcrConfData(id)
}
// 获取aiOcrConf信息
if (id) {
form.id = id;
getAiOcrConfData(id);
}
};
// 提交
const onSubmit = async () => {
const valid = await dataFormRef.value.validate().catch(() => {
});
if (!valid) return false;
const valid = await dataFormRef.value.validate().catch(() => {});
if (!valid) return false;
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
try {
loading.value = true;
form.id ? await putObj(form) : await addObj(form);
useMessage().success(form.id ? '修改成功' : '添加成功');
visible.value = false;
emit('refresh');
} catch (err: any) {
useMessage().error(err.msg);
} finally {
loading.value = false;
}
};
// 初始化表单数据
const getAiOcrConfData = (id: string) => {
// 获取数据
loading.value = true
getObj({id: id}).then((res: any) => {
Object.assign(form, res.data[0])
}).finally(() => {
loading.value = false
})
// 获取数据
loading.value = true;
getObj({ id: id })
.then((res: any) => {
Object.assign(form, res.data[0]);
})
.finally(() => {
loading.value = false;
});
};
// 暴露变量
defineExpose({
openDialog
openDialog,
});
</script>