|
|
@@ -1,12 +1,13 @@
|
|
|
<template>
|
|
|
<div>
|
|
|
- <el-dialog v-model="show" title="重命名" width="70%">
|
|
|
+ <el-dialog v-model="isOpen" title="文字识别" width="55%">
|
|
|
<div class="container">
|
|
|
- <div v-if="!showImg" class="up_box">
|
|
|
+ <div v-if="thisStep === 'start'" class="up_box">
|
|
|
<div class="left_box">
|
|
|
<div class="upimg_box">
|
|
|
<!-- TODO 拖拽设置不生效问题 -->
|
|
|
<el-upload
|
|
|
+ v-if="!showImg"
|
|
|
class="avatar-uploader"
|
|
|
:drag="true"
|
|
|
action="http://192.168.1.28:8080/api/upload"
|
|
|
@@ -17,6 +18,9 @@
|
|
|
<img src="@/assets/images/add.png" class="avatar" />
|
|
|
<span>将图片拖入框内/点击按钮上传图片</span>
|
|
|
</el-upload>
|
|
|
+ <div v-else class="img_show">
|
|
|
+ <img :src="toRaw(showImg)" class="avatar" />
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="sunmit_btn">
|
|
|
<el-upload
|
|
|
@@ -33,6 +37,7 @@
|
|
|
<div class="right_box">
|
|
|
<div class="upimg_box">
|
|
|
<el-upload
|
|
|
+ disabled
|
|
|
class="avatar-uploader"
|
|
|
action="http://192.168.1.28:8080/api/upload"
|
|
|
:show-file-list="false"
|
|
|
@@ -42,34 +47,146 @@
|
|
|
<span>点击按钮上传图片</span>
|
|
|
</el-upload>
|
|
|
</div>
|
|
|
- <div class="sunmit_btn">添加文库图片</div>
|
|
|
+ <div class="sunmit_btn" @click="addlibraryImg">添加文库图片</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div v-else>
|
|
|
- <img :src="toRaw(showImg)" class="avatar" />
|
|
|
+ <div v-if="thisStep === 'loading'" class="load-box">
|
|
|
+ <div class="light_box">
|
|
|
+ <img :src="toRaw(showImg)" class="avatar" />
|
|
|
+ <div class="light"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div v-if="thisStep === 'end'" class="end_box">
|
|
|
+ <div class="left_box">
|
|
|
+ <div class="upimg_box">
|
|
|
+ <div class="img_show">
|
|
|
+ <img :src="toRaw(showImg)" class="avatar" />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="sunmit_btn">
|
|
|
+ <!-- <el-upload
|
|
|
+ class="avatar-uploader"
|
|
|
+ action="http://192.168.1.28:8080/api/upload"
|
|
|
+ :show-file-list="false"
|
|
|
+ :on-success="handleAvatarSuccess"
|
|
|
+ :before-upload="beforeUp"
|
|
|
+ > -->
|
|
|
+ <span @click="reClick">重新选择</span>
|
|
|
+ <!-- </el-upload> -->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="right_box">
|
|
|
+ <div class="upimg_box">
|
|
|
+ <el-scrollbar>
|
|
|
+ <div class="text_box">
|
|
|
+ {{ textData }}
|
|
|
+ </div>
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ <div class="sunmit_btn copy-qb" @click="copyQbUrl()">全部复制</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+ <PicTree
|
|
|
+ :openFile="openFile"
|
|
|
+ @close="openFile = false"
|
|
|
+ :fileUserTreeData="treeData"
|
|
|
+ @fileChangeMsg="fileChangeMsg"
|
|
|
+ ></PicTree>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script setup>
|
|
|
-import { onMounted, ref, toRaw } from "vue";
|
|
|
+import { onMounted, ref, toRaw ,watch} from "vue";
|
|
|
+import { ElMessage } from "element-plus";
|
|
|
+import Clipboard from "clipboard";
|
|
|
+import PicTree from "@/components/PicTree/PicTree.vue"; //选择文件发送的列表
|
|
|
+import { picTree } from "@/api/search/search.js";
|
|
|
+import { ocrRemark, preview } from "@/api/common/common.js";
|
|
|
const textData = ref(""); //解析出来的文字
|
|
|
const showImg = ref(); //上传的图片
|
|
|
-const show = ref(true);
|
|
|
+const isOpen = ref(props.openFile);
|
|
|
+const thisStep = ref("start"); //解析进度 start,loading,end,
|
|
|
+const openFile = ref(false); //控制tree显示
|
|
|
+const treeData = ref(); //树节点数据
|
|
|
+
|
|
|
+const props = defineProps({
|
|
|
+ openFile: {
|
|
|
+ type: Boolean,
|
|
|
+ default: false,
|
|
|
+ },
|
|
|
+});
|
|
|
+watch(
|
|
|
+ () => props.openFile,
|
|
|
+ (newValue) => {
|
|
|
+ // console.log(111);
|
|
|
+ isOpen.value = newValue;
|
|
|
+ }
|
|
|
+);
|
|
|
const handleAvatarSuccess = (msg, file) => {
|
|
|
- console.log("re", msg);
|
|
|
+ // console.log("re", msg);
|
|
|
const flieData = toRaw(file);
|
|
|
- console.log("file", flieData);
|
|
|
- showImg.value = URL.createObjectURL(flieData.raw);
|
|
|
+ // console.log("file", flieData);
|
|
|
+ // showImg.value = URL.createObjectURL(flieData.raw);
|
|
|
if (msg.code === 200) {
|
|
|
textData.value = msg.msg;
|
|
|
+ thisStep.value = "end";
|
|
|
+ } else {
|
|
|
+ thisStep.value = "start";
|
|
|
+ textData.value = null;
|
|
|
+ showImg.value = null;
|
|
|
+ ElMessage({ message: '识别失败', type: 'error' })
|
|
|
}
|
|
|
console.log("textData", textData.value);
|
|
|
};
|
|
|
-const beforeUp = () => {
|
|
|
- console.log(2);
|
|
|
+//文件上传前的钩子
|
|
|
+const beforeUp = (raw) => {
|
|
|
+ // console.log('raw',raw);
|
|
|
+ showImg.value = URL.createObjectURL(raw);
|
|
|
+ thisStep.value = "loading";
|
|
|
+};
|
|
|
+// 复制功能调用的方法
|
|
|
+const copyQbUrl = () => {
|
|
|
+ let clipboard = new Clipboard(".copy-qb", {
|
|
|
+ text: () => {
|
|
|
+ return textData.value;
|
|
|
+ },
|
|
|
+ });
|
|
|
+ clipboard.on("success", () => {
|
|
|
+ // console.log('success');
|
|
|
+ ElMessage({ message: '复制成功', type: 'success' })
|
|
|
+ clipboard.destroy();
|
|
|
+ });
|
|
|
+ clipboard.on("error", () => {
|
|
|
+ // console.log('err');
|
|
|
+ clipboard.destroy();
|
|
|
+ });
|
|
|
+};
|
|
|
+// 选取文库图片
|
|
|
+const addlibraryImg = async () => {
|
|
|
+ const res = await picTree();
|
|
|
+ console.log("res", res);
|
|
|
+ treeData.value = res;
|
|
|
+ openFile.value = true;
|
|
|
+};
|
|
|
+//确定选中图片
|
|
|
+const fileChangeMsg = async (val) => {
|
|
|
+ console.log("val", toRaw(val));
|
|
|
+ const data = toRaw(val);
|
|
|
+ const imgRes = await preview(data.remark);
|
|
|
+ thisStep.value = "loading";
|
|
|
+ showImg.value = URL.createObjectURL(imgRes);
|
|
|
+ const res = await ocrRemark(data.remark);
|
|
|
+ thisStep.value = "end";
|
|
|
+ textData.value = res.msg;
|
|
|
+ // console.log("res", res);
|
|
|
+ // console.log("imgRes", imgRes);
|
|
|
+};
|
|
|
+const reClick = () => {
|
|
|
+ thisStep.value = "start";
|
|
|
+ textData.value = null;
|
|
|
+ showImg.value = null;
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
@@ -88,6 +205,18 @@ const beforeUp = () => {
|
|
|
flex-direction: column;
|
|
|
align-items: center;
|
|
|
margin-right: 48px;
|
|
|
+ .img_show {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ // max-height: 100%;
|
|
|
+ // object-fit:cover; // 保持原比例缩小
|
|
|
+ }
|
|
|
+ }
|
|
|
.upimg_box {
|
|
|
width: 100%;
|
|
|
height: 300px;
|
|
|
@@ -134,6 +263,58 @@ const beforeUp = () => {
|
|
|
font-weight: 400;
|
|
|
text-align: center;
|
|
|
}
|
|
|
+ .text_box {
|
|
|
+ font-size: 14px;
|
|
|
+ font-weight: 500;
|
|
|
+ color: #000000;
|
|
|
+ line-height: 22px;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .load-box {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ .light_box {
|
|
|
+ width: 320px;
|
|
|
+ height: 320px;
|
|
|
+ background-image: url("@/assets/images/light.png");
|
|
|
+ background-repeat: no-repeat;
|
|
|
+ background-size: contain;
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: center;
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ // height: 100%;
|
|
|
+ }
|
|
|
+ .light {
|
|
|
+ width: 100%;
|
|
|
+ height: 1px;
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ left: 0;
|
|
|
+ right: 0;
|
|
|
+ bottom: 0;
|
|
|
+ background-color: rgba(0, 255, 255, 0.7);
|
|
|
+ box-shadow: 0px 2px 10px 5px rgba(0, 255, 255, 0.3);
|
|
|
+ animation: move 2s infinite linear;
|
|
|
+ }
|
|
|
+ @keyframes move {
|
|
|
+ from {
|
|
|
+ top: 0px;
|
|
|
+ }
|
|
|
+
|
|
|
+ /*网格移动到显示区域的外面*/
|
|
|
+ to {
|
|
|
+ top: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ .end_box {
|
|
|
+ display: flex;
|
|
|
+ justify-content: center;
|
|
|
}
|
|
|
}
|
|
|
:deep(.el-dialog__header) {
|