PDF监听工具返回统一处理
This commit is contained in:
parent
f72b2f8341
commit
bb0fb16ede
File diff suppressed because one or more lines are too long
|
@ -13097,15 +13097,16 @@ const PDFViewerApplication = {
|
||||||
}
|
}
|
||||||
if (isValidSpreadMode(spread)) {
|
if (isValidSpreadMode(spread)) {
|
||||||
//默认双页
|
//默认双页
|
||||||
// this.pdfViewer.spreadMode = spread;
|
this.pdfViewer.spreadMode = spread;
|
||||||
this.pdfViewer.spreadMode = 1;
|
//默认双页
|
||||||
|
// this.pdfViewer.spreadMode = 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
this.isInitialViewSet = true;
|
this.isInitialViewSet = true;
|
||||||
this.pdfSidebar?.setInitialView(sidebarView);
|
this.pdfSidebar?.setInitialView(sidebarView);
|
||||||
//默认双页
|
//默认双页
|
||||||
// setViewerModes(scrollMode, spreadMode);
|
setViewerModes(scrollMode, spreadMode);
|
||||||
setViewerModes(scrollMode, 1);
|
// setViewerModes(scrollMode, 1);
|
||||||
if (this.initialBookmark) {
|
if (this.initialBookmark) {
|
||||||
setRotation(this.initialRotation);
|
setRotation(this.initialRotation);
|
||||||
delete this.initialRotation;
|
delete this.initialRotation;
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 查询分析列表
|
||||||
|
export function getEvaluationclueList(params) {
|
||||||
|
return request({
|
||||||
|
url: '/education/evaluationclue/list',
|
||||||
|
method: 'get',
|
||||||
|
params
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改分析内容
|
||||||
|
export function updateEvaluationclue(data) {
|
||||||
|
return request({
|
||||||
|
url: '/education/evaluationclue',
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 新增分析
|
||||||
|
export function addEvaluationclue(data) {
|
||||||
|
return request({
|
||||||
|
url: '/education/evaluationclue',
|
||||||
|
method: 'post',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
|
@ -0,0 +1,224 @@
|
||||||
|
import request from '@/utils/request'
|
||||||
|
import axios from 'axios';
|
||||||
|
import { ElMessage, ElMessageBox, ElNotification } from "element-plus";
|
||||||
|
import qs from 'qs';
|
||||||
|
import { uploadServer, getJSONFile } from '@/utils/common';
|
||||||
|
import { getEvaluationclueList, updateEvaluationclue, addEvaluationclue } from '@/api/pdf';
|
||||||
|
|
||||||
|
export const pdfCallBack = (pdfInfo) => {
|
||||||
|
if(pdfInfo.toString() !== '{}' || pdfInfo !== null){
|
||||||
|
if(pdfInfo.storageInfo){
|
||||||
|
//圈点勾画操作返回
|
||||||
|
// saveJSON(pdfInfo.storageInfo)
|
||||||
|
saveAnnotationStorage(pdfInfo.storageInfo)
|
||||||
|
return 'draw'
|
||||||
|
}else if(pdfInfo.quoteInfo){
|
||||||
|
//引用文本操作返回
|
||||||
|
quoteWords(pdfInfo.quoteInfo)
|
||||||
|
return 'quote'
|
||||||
|
}else if(pdfInfo.imgInfo){
|
||||||
|
//OCR截图返回
|
||||||
|
ocrCallBack(pdfInfo.imgInfo)
|
||||||
|
return 'ocr'
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
return ''
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//百度OCR识别配置
|
||||||
|
const baidubceConfig = {
|
||||||
|
// Header
|
||||||
|
'Content-Type': "application/x-www-form-urlencoded",
|
||||||
|
// 格式
|
||||||
|
'Accept' : 'application/json',
|
||||||
|
// id(临时测试)
|
||||||
|
'client_id': "U0DrGBE6X92IXgV6cJMNON8F",
|
||||||
|
// 密钥(临时测试)
|
||||||
|
'client_secret': 'oWb0M0YWMmZPMQIhIUkJX99ddr7h61qf',
|
||||||
|
};
|
||||||
|
|
||||||
|
//获取百度token
|
||||||
|
const getBaiduToken = async () => {
|
||||||
|
let config = {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': `${baidubceConfig['Content-Type']}`
|
||||||
|
},
|
||||||
|
url: `/baidubce/oauth/2.0/token?grant_type=client_credentials&client_id=${baidubceConfig['client_id']}&client_secret=${baidubceConfig['client_secret']}`,
|
||||||
|
method: 'POST'
|
||||||
|
}
|
||||||
|
return await axios(config)
|
||||||
|
}
|
||||||
|
//图片识别方法
|
||||||
|
const getBaiduOCR = async (token,params) => {
|
||||||
|
let config = {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': `${baidubceConfig['Content-Type']}`,
|
||||||
|
'Accept': `${baidubceConfig['Accept']}`,
|
||||||
|
},
|
||||||
|
method: 'POST',
|
||||||
|
url: `/baidubce/rest/2.0/ocr/v1/doc_analysis?access_token=${token}`,
|
||||||
|
data: qs.stringify(params),
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
return await axios(config)
|
||||||
|
}catch{
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const ocrCallBack = async (ocrInfo) => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'info',
|
||||||
|
message: '正在识别请稍后',
|
||||||
|
grouping: true,
|
||||||
|
duration: 3000
|
||||||
|
})
|
||||||
|
const baseUrl = ocrInfo.base64;
|
||||||
|
const imgurl = baseUrl.split(",")[1];
|
||||||
|
//获取百度智能云token
|
||||||
|
const tokenData = await getBaiduToken();
|
||||||
|
console.log('----tokenData',tokenData);
|
||||||
|
if(tokenData.status !== 200){
|
||||||
|
ElMessage({
|
||||||
|
type: 'error',
|
||||||
|
message: '文字识别获取用户标识失败',
|
||||||
|
grouping: true,
|
||||||
|
showClose: true,
|
||||||
|
duration: 5000
|
||||||
|
})
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//获取到的token
|
||||||
|
const token = tokenData.data?.access_token;
|
||||||
|
const query = {
|
||||||
|
image: imgurl, //图片地址(base64)
|
||||||
|
line_probability: false, //是否返回每行识别结果的置信度。默认为false
|
||||||
|
disp_line_poly: false, //是否返回每行的四角点坐标。默认为false
|
||||||
|
words_type: 'handprint_mix', //文字类型。 默认:印刷文字识别 = handwring_only:手写文字识别 = handprint_mix: 手写印刷混排识别
|
||||||
|
layout_analysis: false, //是否分析文档版面:包括layout(图、表、标题、段落、目录);attribute(栏、页眉、页脚、页码、脚注)的分析输出
|
||||||
|
recg_long_division: false, //是否检测并识别手写竖式
|
||||||
|
recg_formula: true, //控制是否检测并识别公式,默认为false
|
||||||
|
}
|
||||||
|
const ocrData = await getBaiduOCR(token,query);
|
||||||
|
if(ocrData && ocrData.status === 200){
|
||||||
|
const ocrList = ocrData.data?.words_result;
|
||||||
|
let words = '';
|
||||||
|
ocrList.map(item => {
|
||||||
|
words += item.words
|
||||||
|
})
|
||||||
|
ElMessageBox.alert(words, '识别结果', {
|
||||||
|
confirmButtonText: '引用文本',
|
||||||
|
type: 'info',
|
||||||
|
cancelButtonText: '取消'
|
||||||
|
}).then(() => {
|
||||||
|
window.navigator.clipboard.writeText(words).then(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'success',
|
||||||
|
message: '已复制到粘贴板',
|
||||||
|
grouping: true,
|
||||||
|
duration: 3000
|
||||||
|
})
|
||||||
|
}).catch(() => {
|
||||||
|
ElMessage({
|
||||||
|
type: 'error',
|
||||||
|
message: '复制信息出错',
|
||||||
|
grouping: true,
|
||||||
|
duration: 3000
|
||||||
|
})
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
ElMessage({
|
||||||
|
type: 'error',
|
||||||
|
message: '识别信息出错',
|
||||||
|
grouping: true,
|
||||||
|
duration: 3000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const saveAnnotationStorage = (storage) => {
|
||||||
|
localStorage.setItem('PDFJS_Annotation', JSON.stringify(storage));
|
||||||
|
}
|
||||||
|
//保存json文件
|
||||||
|
export const saveJSON = (data) => {
|
||||||
|
let filename = ''
|
||||||
|
if (!data) {
|
||||||
|
console.log('传入的data数据为null');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!filename) {
|
||||||
|
filename = `json${Date.now()}.json`
|
||||||
|
console.log('未传入文件名,采用默认文件名' + filename);
|
||||||
|
}
|
||||||
|
let newdata = null;
|
||||||
|
if (typeof data === 'object') {
|
||||||
|
newdata = JSON.stringify(data, undefined, 4)
|
||||||
|
}
|
||||||
|
// 创建json文件blob流
|
||||||
|
const blob = new Blob([newdata], { type: 'text/json' });
|
||||||
|
// 创建file文件
|
||||||
|
const file = new File([blob],filename, {type: blob.type})
|
||||||
|
// 创建上传文件流
|
||||||
|
const formdata = new FormData();
|
||||||
|
formdata.append('file', file);
|
||||||
|
//其他参数待添加
|
||||||
|
|
||||||
|
//上传
|
||||||
|
uploadServer(formdata).then(res => {
|
||||||
|
console.log('+++++++++++++');
|
||||||
|
console.log(res.data);
|
||||||
|
})
|
||||||
|
//下载json文件
|
||||||
|
// let e = document.createEvent('MouseEvents');
|
||||||
|
// let a = document.createElement('a');
|
||||||
|
// a.download = filename;
|
||||||
|
// a.href = window.URL.createObjectURL(blob);
|
||||||
|
// a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
|
||||||
|
// e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
||||||
|
// a.dispatchEvent(e);
|
||||||
|
}
|
||||||
|
//引用文本
|
||||||
|
const quoteWords = (quoteInfo) => {
|
||||||
|
const { textStr, StartStr, EndStr } = quoteInfo;
|
||||||
|
if(textStr === StartStr || textStr === EndStr){
|
||||||
|
ElNotification({
|
||||||
|
title: '引用内容',
|
||||||
|
message: textStr,
|
||||||
|
duration: 0,
|
||||||
|
type: 'info',
|
||||||
|
offset: 120
|
||||||
|
})
|
||||||
|
//如果开头和结尾的文字跟内容相同,那么它要么是开头,要么是整段,不需要替换操作
|
||||||
|
console.log('无需替换------',textStr);
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let midStr = ''
|
||||||
|
if(StartStr === '' && EndStr === '' && textStr === '') return
|
||||||
|
if(StartStr === '' && EndStr !== '') {
|
||||||
|
midStr = textStr.replace(EndStr,'eeeeee').split('eeeeee')[0]
|
||||||
|
}else if(StartStr !== '' && EndStr === ''){
|
||||||
|
midStr = textStr.replace(StartStr,'ssssss').split('ssssss')[1]
|
||||||
|
}else{
|
||||||
|
midStr = textStr.replace(StartStr, 'ssssss').replace(EndStr,'eeeeee').split('ssssss')[1].split('eeeeee')[0];
|
||||||
|
}
|
||||||
|
ElNotification({
|
||||||
|
title: '引用内容',
|
||||||
|
message: StartStr + midStr + EndStr,
|
||||||
|
duration: 0,
|
||||||
|
type: 'info',
|
||||||
|
offset: 120
|
||||||
|
})
|
||||||
|
console.log('中间文字------',midStr);
|
||||||
|
console.log('转换后整体文字------',StartStr + midStr + EndStr);
|
||||||
|
}
|
||||||
|
//获取分析列表
|
||||||
|
export const getAnalysisList = async (params) => {
|
||||||
|
return await getEvaluationclueList(params)
|
||||||
|
}
|
||||||
|
//新增分析数据
|
||||||
|
export const addAnalysis = async (params) => {
|
||||||
|
return await addEvaluationclue(params);
|
||||||
|
}
|
||||||
|
//修改分析数据
|
||||||
|
export const updateAnalusis = async (params) => {
|
||||||
|
return await updateEvaluationclue(params);
|
||||||
|
}
|
|
@ -84,11 +84,11 @@ import PDF from '@/components/PdfJs/index.vue'
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import useResoureStore from '../../resource/store'
|
import useResoureStore from '../../resource/store'
|
||||||
import { listEvaluationclue } from '@/api/teaching/classwork'
|
import { listEvaluationclue } from '@/api/teaching/classwork'
|
||||||
import { uploadServer, getJSONFile } from '@/utils/common'
|
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus'
|
||||||
import ChooseTextbook from "@/components/choose-textbook/index.vue";
|
import ChooseTextbook from "@/components/choose-textbook/index.vue";
|
||||||
import { listEvaluation } from '@/api/classManage/index'
|
import { listEvaluation } from '@/api/classManage/index'
|
||||||
import useUserStore from '@/store/modules/user'
|
import useUserStore from '@/store/modules/user'
|
||||||
|
import { pdfCallBack } from '@/utils/pdftools'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const sourceStore = useResoureStore()
|
const sourceStore = useResoureStore()
|
||||||
// import { getStaticUrl } from '@/utils/tool'
|
// import { getStaticUrl } from '@/utils/tool'
|
||||||
|
@ -171,52 +171,6 @@ const selectHandel = (value) => {
|
||||||
const filterData = searchInp.value !== '' ? showData.value : standList.value
|
const filterData = searchInp.value !== '' ? showData.value : standList.value
|
||||||
showData.value = filterList(filterData);
|
showData.value = filterList(filterData);
|
||||||
}
|
}
|
||||||
//保存json文件
|
|
||||||
const saveJSON = (data) => {
|
|
||||||
|
|
||||||
let filename = ''
|
|
||||||
// const data = {
|
|
||||||
// name: 'txt',
|
|
||||||
// class: '五年级2班',
|
|
||||||
// school: '重庆市酉阳二中',
|
|
||||||
// time: '2024-08-09'
|
|
||||||
// }
|
|
||||||
// saveJSON(jsonStr);
|
|
||||||
if (!data) {
|
|
||||||
console.log('传入的data数据为null');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!filename) {
|
|
||||||
filename = `json${Date.now()}.json`
|
|
||||||
console.log('未传入文件名,采用默认文件名' + filename);
|
|
||||||
}
|
|
||||||
let newdata = null;
|
|
||||||
if (typeof data === 'object') {
|
|
||||||
newdata = JSON.stringify(data, undefined, 4)
|
|
||||||
}
|
|
||||||
// 创建json文件blob流
|
|
||||||
const blob = new Blob([newdata], { type: 'text/json' });
|
|
||||||
// 创建file文件
|
|
||||||
// const file = new File([blob],filename, {type: blob.type})
|
|
||||||
// 创建上传文件流
|
|
||||||
// const formdata = new FormData();
|
|
||||||
// formdata.append('file', file);
|
|
||||||
//其他参数待添加
|
|
||||||
|
|
||||||
//上传
|
|
||||||
// uploadServer(formdata).then(res => {
|
|
||||||
// console.log('+++++++++++++');
|
|
||||||
// console.log(res.data);
|
|
||||||
// })
|
|
||||||
|
|
||||||
let e = document.createEvent('MouseEvents');
|
|
||||||
let a = document.createElement('a');
|
|
||||||
a.download = filename;
|
|
||||||
a.href = window.URL.createObjectURL(blob);
|
|
||||||
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
|
|
||||||
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
|
||||||
a.dispatchEvent(e);
|
|
||||||
}
|
|
||||||
// 查询
|
// 查询
|
||||||
const getData = (data) => {
|
const getData = (data) => {
|
||||||
const { textBook, node } = data
|
const { textBook, node } = data
|
||||||
|
@ -295,53 +249,9 @@ onMounted(async () => {
|
||||||
window.addEventListener('message',(event) => {
|
window.addEventListener('message',(event) => {
|
||||||
// console.log('------------');
|
// console.log('------------');
|
||||||
const iframeMes = event.data;
|
const iframeMes = event.data;
|
||||||
if(iframeMes.storageInfo){
|
//监听pdf返回事件,在pdf工具类中统一处理
|
||||||
// saveJSON(iframeMes.storageInfo);
|
pdfCallBack(iframeMes)
|
||||||
// console.log(JSON.stringify(iframeMes.storageInfo));
|
|
||||||
}
|
|
||||||
if(iframeMes.quoteInfo){
|
|
||||||
console.log(iframeMes.quoteInfo);
|
|
||||||
const { textStr, StartStr, EndStr } = iframeMes.quoteInfo;
|
|
||||||
if(textStr === StartStr || textStr === EndStr){
|
|
||||||
ElNotification({
|
|
||||||
title: '引用内容',
|
|
||||||
message: textStr,
|
|
||||||
duration: 0,
|
|
||||||
type: 'info',
|
|
||||||
offset: 120
|
|
||||||
})
|
})
|
||||||
//如果开头和结尾的文字跟内容相同,那么它要么是开头,要么是整段,不需要替换操作
|
|
||||||
console.log('无需替换------',textStr);
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let midStr = ''
|
|
||||||
if(StartStr === '' && EndStr === '' && textStr === '') return
|
|
||||||
if(StartStr === '' && EndStr !== '') {
|
|
||||||
midStr = textStr.replace(EndStr,'eeeeee').split('eeeeee')[0]
|
|
||||||
}else if(StartStr !== '' && EndStr === ''){
|
|
||||||
midStr = textStr.replace(StartStr,'ssssss').split('ssssss')[1]
|
|
||||||
}else{
|
|
||||||
midStr = textStr.replace(StartStr, 'ssssss').replace(EndStr,'eeeeee').split('ssssss')[1].split('eeeeee')[0];
|
|
||||||
}
|
|
||||||
ElNotification({
|
|
||||||
title: '引用内容',
|
|
||||||
message: StartStr + midStr + EndStr,
|
|
||||||
duration: 0,
|
|
||||||
type: 'info',
|
|
||||||
offset: 120
|
|
||||||
})
|
|
||||||
console.log('中间文字------',midStr);
|
|
||||||
console.log('转换后整体文字------',StartStr + midStr + EndStr);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
// const isDev = process.env.NODE_ENV == 'development'
|
|
||||||
// if (isDev)
|
|
||||||
// pdfUrl.value = '/'+getStaticUrl('aaa.pdf', 'user', 'selfFile', true)
|
|
||||||
// else
|
|
||||||
// pdfUrl.value = getStaticUrl(route.query.path, 'user', 'selfFile', true)
|
|
||||||
|
|
||||||
// console.log('页面',pdfUrl.value);
|
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|
|
@ -83,17 +83,15 @@ import { onMounted, ref } from 'vue'
|
||||||
import PDF from '@/components/PdfJs/index.vue'
|
import PDF from '@/components/PdfJs/index.vue'
|
||||||
import { useRoute } from 'vue-router';
|
import { useRoute } from 'vue-router';
|
||||||
import useResoureStore from '../resource/store'
|
import useResoureStore from '../resource/store'
|
||||||
import { listEvaluationclue } from '@/api/teaching/classwork'
|
|
||||||
// import { uploadServer, getJSONFile } from '@/utils/common'
|
|
||||||
import { ElNotification } from 'element-plus'
|
import { ElNotification } from 'element-plus'
|
||||||
import ChooseTextbook from "@/components/choose-textbook/index.vue";
|
import ChooseTextbook from "@/components/choose-textbook/index.vue";
|
||||||
import { listEvaluation } from '@/api/classManage/index'
|
import { listEvaluation } from '@/api/classManage/index'
|
||||||
import useUserStore from '@/store/modules/user'
|
import useUserStore from '@/store/modules/user'
|
||||||
import { sessionStore } from '@/utils/store'
|
import { sessionStore } from '@/utils/store'
|
||||||
import { useGetSubject } from '@/hooks/useGetSubject'
|
import { useGetSubject } from '@/hooks/useGetSubject'
|
||||||
|
import { pdfCallBack, getAnalysisList, addAnalysis, updateAnalusis } from '@/utils/pdftools'
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
const sourceStore = useResoureStore()
|
const sourceStore = useResoureStore()
|
||||||
// import { getStaticUrl } from '@/utils/tool'
|
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
const pdfUrl = ref('');
|
const pdfUrl = ref('');
|
||||||
|
@ -111,7 +109,6 @@ const bookInfo = ref(null);
|
||||||
const booksel = ref(0);
|
const booksel = ref(0);
|
||||||
const bookList = ref([])
|
const bookList = ref([])
|
||||||
|
|
||||||
|
|
||||||
const searchOptions = [{
|
const searchOptions = [{
|
||||||
value: '0',
|
value: '0',
|
||||||
label: '按时间',
|
label: '按时间',
|
||||||
|
@ -122,17 +119,6 @@ const searchOptions = [{
|
||||||
const standList = ref([]);
|
const standList = ref([]);
|
||||||
const showData = ref([]);
|
const showData = ref([]);
|
||||||
|
|
||||||
//查询课标分析列表
|
|
||||||
const getlistEvaluationclue = (firstid, levelid) => {
|
|
||||||
const newid = firstid ? firstid : levelid;
|
|
||||||
listEvaluationclue({evalid: newid, parentid: 0, cluegroup: 'teachresource', orderby: "timestamp desc", pageSize: 100}).then((res) => {
|
|
||||||
if(res.code === 200){
|
|
||||||
const newData = formaterTime(res.rows)
|
|
||||||
standList.value = newData
|
|
||||||
showData.value = filterList(newData)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
const formaterTime = (data) => {
|
const formaterTime = (data) => {
|
||||||
return data.map(item => {
|
return data.map(item => {
|
||||||
return {
|
return {
|
||||||
|
@ -173,75 +159,7 @@ const selectHandel = (value) => {
|
||||||
const filterData = searchInp.value !== '' ? showData.value : standList.value
|
const filterData = searchInp.value !== '' ? showData.value : standList.value
|
||||||
showData.value = filterList(filterData);
|
showData.value = filterList(filterData);
|
||||||
}
|
}
|
||||||
//保存json文件
|
|
||||||
const saveJSON = (data) => {
|
|
||||||
|
|
||||||
let filename = ''
|
|
||||||
// const data = {
|
|
||||||
// name: 'txt',
|
|
||||||
// class: '五年级2班',
|
|
||||||
// school: '重庆市酉阳二中',
|
|
||||||
// time: '2024-08-09'
|
|
||||||
// }
|
|
||||||
// saveJSON(jsonStr);
|
|
||||||
if (!data) {
|
|
||||||
console.log('传入的data数据为null');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!filename) {
|
|
||||||
filename = `json${Date.now()}.json`
|
|
||||||
console.log('未传入文件名,采用默认文件名' + filename);
|
|
||||||
}
|
|
||||||
let newdata = null;
|
|
||||||
if (typeof data === 'object') {
|
|
||||||
newdata = JSON.stringify(data, undefined, 4)
|
|
||||||
}
|
|
||||||
// 创建json文件blob流
|
|
||||||
const blob = new Blob([newdata], { type: 'text/json' });
|
|
||||||
// 创建file文件
|
|
||||||
// const file = new File([blob],filename, {type: blob.type})
|
|
||||||
// 创建上传文件流
|
|
||||||
// const formdata = new FormData();
|
|
||||||
// formdata.append('file', file);
|
|
||||||
//其他参数待添加
|
|
||||||
|
|
||||||
//上传
|
|
||||||
// uploadServer(formdata).then(res => {
|
|
||||||
// console.log('+++++++++++++');
|
|
||||||
// console.log(res.data);
|
|
||||||
// })
|
|
||||||
|
|
||||||
let e = document.createEvent('MouseEvents');
|
|
||||||
let a = document.createElement('a');
|
|
||||||
a.download = filename;
|
|
||||||
a.href = window.URL.createObjectURL(blob);
|
|
||||||
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
|
|
||||||
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
|
||||||
a.dispatchEvent(e);
|
|
||||||
}
|
|
||||||
// 查询
|
|
||||||
const getData = (data) => {
|
|
||||||
const { textBook, node } = data
|
|
||||||
let textbookId = textBook.curBookId
|
|
||||||
let levelSecondId = node.id
|
|
||||||
let levelFirstId
|
|
||||||
if (node.parentNode) {
|
|
||||||
levelFirstId = node.parentNode.id
|
|
||||||
} else {
|
|
||||||
levelFirstId = node.id
|
|
||||||
levelSecondId = ''
|
|
||||||
}
|
|
||||||
sourceStore.query.levelFirstId = levelFirstId
|
|
||||||
sourceStore.query.levelSecondId = levelSecondId
|
|
||||||
sourceStore.query.textbookId = textbookId
|
|
||||||
sourceStore.nodeData = {
|
|
||||||
textbookId, //版本
|
|
||||||
levelFirstId, //单元
|
|
||||||
levelSecondId //单元课程
|
|
||||||
}
|
|
||||||
sourceStore.handleQuery()
|
|
||||||
getlistEvaluationclue(levelFirstId, levelSecondId)
|
|
||||||
}
|
|
||||||
// 获取学科
|
// 获取学科
|
||||||
const getAllSubject = async () => {
|
const getAllSubject = async () => {
|
||||||
const { edustage, edusubject } = userStore.user;
|
const { edustage, edusubject } = userStore.user;
|
||||||
|
@ -259,6 +177,7 @@ const getAllSubject = async () => {
|
||||||
bookList.value = dataList
|
bookList.value = dataList
|
||||||
const session = sessionStore.get('subject.curNode')
|
const session = sessionStore.get('subject.curNode')
|
||||||
console.log('session',session);
|
console.log('session',session);
|
||||||
|
console.log('datalist',dataList[0]);
|
||||||
let filePath = import.meta.env.VITE_APP_RES_FILE_PATH;
|
let filePath = import.meta.env.VITE_APP_RES_FILE_PATH;
|
||||||
if(session.rootid){
|
if(session.rootid){
|
||||||
const idx = dataList.findIndex(item => item.id === session.rootid)
|
const idx = dataList.findIndex(item => item.id === session.rootid)
|
||||||
|
@ -269,11 +188,11 @@ const getAllSubject = async () => {
|
||||||
bookInfo.value = {...dataList[0]}
|
bookInfo.value = {...dataList[0]}
|
||||||
filePath += dataList[0].fileurl.replace('.txt','.pdf')
|
filePath += dataList[0].fileurl.replace('.txt','.pdf')
|
||||||
}
|
}
|
||||||
await loadPdfAnimation(filePath)
|
|
||||||
}else{
|
}else{
|
||||||
bookInfo.value = {...dataList[0]}
|
bookInfo.value = {...dataList[0]}
|
||||||
filePath += dataList[0].fileurl.replace('.txt','.pdf')
|
filePath += dataList[0].fileurl.replace('.txt','.pdf')
|
||||||
}
|
}
|
||||||
|
await loadPdfAnimation(filePath)
|
||||||
}
|
}
|
||||||
const bookChange = async (item, idx) => {
|
const bookChange = async (item, idx) => {
|
||||||
booksel.value = idx
|
booksel.value = idx
|
||||||
|
@ -293,6 +212,14 @@ const loadPdfAnimation = (path) => {
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
await useGetSubject();
|
await useGetSubject();
|
||||||
await getAllSubject();
|
await getAllSubject();
|
||||||
|
await getAnalysisList({evalid: bookInfo.value.id, parentid: 0, cluegroup: 'textbookAnalysis', orderby: "timestamp desc", pageSize: 100}).then((res) => {
|
||||||
|
if(res.code === 200){
|
||||||
|
const newData = formaterTime(res.rows)
|
||||||
|
standList.value = newData
|
||||||
|
// showData.value = filterList(newData)
|
||||||
|
showData.value = newData
|
||||||
|
}
|
||||||
|
})
|
||||||
if(cardref.value && headref.value){
|
if(cardref.value && headref.value){
|
||||||
const cardH = cardref.value.offsetHeight;
|
const cardH = cardref.value.offsetHeight;
|
||||||
const headh = headref.value.offsetHeight;
|
const headh = headref.value.offsetHeight;
|
||||||
|
@ -309,46 +236,10 @@ onMounted(async () => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.addEventListener('message',(event) => {
|
window.addEventListener('message',(event) => {
|
||||||
// console.log('------------');
|
console.log('------------');
|
||||||
const iframeMes = event.data;
|
const iframeMes = event.data;
|
||||||
if(iframeMes.storageInfo){
|
console.log('------------',iframeMes);
|
||||||
// saveJSON(iframeMes.storageInfo);
|
pdfCallBack(iframeMes)
|
||||||
// console.log(JSON.stringify(iframeMes.storageInfo));
|
|
||||||
}
|
|
||||||
if(iframeMes.quoteInfo){
|
|
||||||
console.log(iframeMes.quoteInfo);
|
|
||||||
const { textStr, StartStr, EndStr } = iframeMes.quoteInfo;
|
|
||||||
if(textStr === StartStr || textStr === EndStr){
|
|
||||||
ElNotification({
|
|
||||||
title: '引用内容',
|
|
||||||
message: textStr,
|
|
||||||
duration: 0,
|
|
||||||
type: 'info',
|
|
||||||
offset: 120
|
|
||||||
})
|
|
||||||
//如果开头和结尾的文字跟内容相同,那么它要么是开头,要么是整段,不需要替换操作
|
|
||||||
console.log('无需替换------',textStr);
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let midStr = ''
|
|
||||||
if(StartStr === '' && EndStr === '' && textStr === '') return
|
|
||||||
if(StartStr === '' && EndStr !== '') {
|
|
||||||
midStr = textStr.replace(EndStr,'eeeeee').split('eeeeee')[0]
|
|
||||||
}else if(StartStr !== '' && EndStr === ''){
|
|
||||||
midStr = textStr.replace(StartStr,'ssssss').split('ssssss')[1]
|
|
||||||
}else{
|
|
||||||
midStr = textStr.replace(StartStr, 'ssssss').replace(EndStr,'eeeeee').split('ssssss')[1].split('eeeeee')[0];
|
|
||||||
}
|
|
||||||
ElNotification({
|
|
||||||
title: '引用内容',
|
|
||||||
message: StartStr + midStr + EndStr,
|
|
||||||
duration: 0,
|
|
||||||
type: 'info',
|
|
||||||
offset: 120
|
|
||||||
})
|
|
||||||
console.log('中间文字------',midStr);
|
|
||||||
console.log('转换后整体文字------',StartStr + midStr + EndStr);
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// const isDev = process.env.NODE_ENV == 'development'
|
// const isDev = process.env.NODE_ENV == 'development'
|
||||||
|
|
Loading…
Reference in New Issue