Compare commits
No commits in common. "1dac204c254d8703e31d7a49191f20808bccc784" and "7b5988c979d99f1854f4964d008b28053060b8ce" have entirely different histories.
1dac204c25
...
7b5988c979
File diff suppressed because one or more lines are too long
|
@ -13097,16 +13097,15 @@ 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;
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
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
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -1,224 +0,0 @@
|
||||||
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,6 +171,52 @@ 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
|
||||||
|
@ -249,9 +295,53 @@ onMounted(async () => {
|
||||||
window.addEventListener('message',(event) => {
|
window.addEventListener('message',(event) => {
|
||||||
// console.log('------------');
|
// console.log('------------');
|
||||||
const iframeMes = event.data;
|
const iframeMes = event.data;
|
||||||
//监听pdf返回事件,在pdf工具类中统一处理
|
if(iframeMes.storageInfo){
|
||||||
pdfCallBack(iframeMes)
|
// saveJSON(iframeMes.storageInfo);
|
||||||
|
// 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,15 +83,17 @@ 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('');
|
||||||
|
@ -109,6 +111,7 @@ 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: '按时间',
|
||||||
|
@ -119,6 +122,17 @@ 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 {
|
||||||
|
@ -159,7 +173,75 @@ 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;
|
||||||
|
@ -177,7 +259,6 @@ 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)
|
||||||
|
@ -188,11 +269,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
|
||||||
|
@ -212,14 +293,6 @@ 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;
|
||||||
|
@ -236,10 +309,46 @@ onMounted(async () => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
window.addEventListener('message',(event) => {
|
window.addEventListener('message',(event) => {
|
||||||
console.log('------------');
|
// console.log('------------');
|
||||||
const iframeMes = event.data;
|
const iframeMes = event.data;
|
||||||
console.log('------------',iframeMes);
|
if(iframeMes.storageInfo){
|
||||||
pdfCallBack(iframeMes)
|
// saveJSON(iframeMes.storageInfo);
|
||||||
|
// 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