Browse Source

导入文件夹

hanyuqing
hanyuqing 5 months ago
parent
commit
1cd05fc126
  1. 28
      gyxtp/package-lock.json
  2. 2
      gyxtp/package.json
  3. 191
      gyxtp/src/view/docInfo.vue
  4. 4
      ruoyi-ui/src/views/system/fileManage/indexNB.vue

28
gyxtp/package-lock.json

@ -21,7 +21,9 @@
"fabric": "^6.4.3",
"mammoth": "^1.11.0",
"mammoth-math": "^0.0.2",
"mathjax": "^3.2.2",
"mathjax-full": "^3.2.2",
"mathml-to-latex": "^1.5.0",
"neovis.js": "^2.1.0",
"pdfjs-dist": "^5.4.149",
"relation-graph-vue3": "^2.2.11",
@ -10289,6 +10291,11 @@
"node": ">= 0.4"
}
},
"node_modules/mathjax": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz",
"integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw=="
},
"node_modules/mathjax-full": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
@ -10301,6 +10308,14 @@
"speech-rule-engine": "^4.0.6"
}
},
"node_modules/mathml-to-latex": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/mathml-to-latex/-/mathml-to-latex-1.5.0.tgz",
"integrity": "sha512-rrWn0eEvcEcdMM4xfHcSGIy+i01DX9byOdXTLWg+w1iJ6O6ohP5UXY1dVzNUZLhzfl3EGcRekWLhY7JT5Omaew==",
"dependencies": {
"@xmldom/xmldom": "^0.8.10"
}
},
"node_modules/mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",
@ -23838,6 +23853,11 @@
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
"dev": true
},
"mathjax": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/mathjax/-/mathjax-3.2.2.tgz",
"integrity": "sha512-Bt+SSVU8eBG27zChVewOicYs7Xsdt40qm4+UpHyX7k0/O9NliPc+x77k1/FEsPsjKPZGJvtRZM1vO+geW0OhGw=="
},
"mathjax-full": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/mathjax-full/-/mathjax-full-3.2.2.tgz",
@ -23849,6 +23869,14 @@
"speech-rule-engine": "^4.0.6"
}
},
"mathml-to-latex": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/mathml-to-latex/-/mathml-to-latex-1.5.0.tgz",
"integrity": "sha512-rrWn0eEvcEcdMM4xfHcSGIy+i01DX9byOdXTLWg+w1iJ6O6ohP5UXY1dVzNUZLhzfl3EGcRekWLhY7JT5Omaew==",
"requires": {
"@xmldom/xmldom": "^0.8.10"
}
},
"mdn-data": {
"version": "2.0.14",
"resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz",

2
gyxtp/package.json

@ -18,7 +18,9 @@
"fabric": "^6.4.3",
"mammoth": "^1.11.0",
"mammoth-math": "^0.0.2",
"mathjax": "^3.2.2",
"mathjax-full": "^3.2.2",
"mathml-to-latex": "^1.5.0",
"neovis.js": "^2.1.0",
"pdfjs-dist": "^5.4.149",
"relation-graph-vue3": "^2.2.11",

191
gyxtp/src/view/docInfo.vue

@ -189,7 +189,52 @@
</div>
<div ref="content" v-html="htmlContent" class="docx-content"></div>
<div ref="testMath">
<p>
娃哈哈
<math xmlns:mml="http://www.w3.org/1998/Math/MathML">
<mml:mo>±</mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mo stretchy="false"></mml:mo>
<mml:mrow>
<mml:mi>n</mml:mi>
<mml:mo>=</mml:mo>
<mml:mn>1</mml:mn>
</mml:mrow>
<mml:mrow>
<mml:mi>m</mml:mi>
</mml:mrow>
</mml:msubsup>
<mml:mrow>
<mrow>
<mo>(</mo>
<mml:msub>
<mml:mrow>
<mml:mi>X</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mn>2</mml:mn>
</mml:mrow>
</mml:msub>
<mml:mo></mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>Y</mml:mi>
</mml:mrow>
<mml:mrow>
<mml:mi>n</mml:mi>
</mml:mrow>
</mml:msub>
<mo>)</mo>
</mrow>
</mml:mrow>
</mml:mrow>
</math>
11
</p ></div>
<div class="yuanwen" v-html="contentInfo.content"></div>
</div>
@ -369,7 +414,7 @@ import RelationGraph from 'relation-graph-vue3';
import HeaderInfo from '../components/UseAll/headerInfo'
import leftInfo from "../components/UseAll/leftInfo";
import {ElMessage} from 'element-plus'
import { mathmlToLatex } from 'mammoth-math';
import { convert } from 'mathml-to-latex';
const graphOptions = {
debug: true,
backgrounImageNoRepeat: true,
@ -407,6 +452,39 @@ const graphOptions = {
},
backgroundColor: "#2d3562"
};
// methods script
function transformOMath(element) {
console.log('🟢 transformOMath:', element.type, element.name);
// oMath
if (element.type === 'element' &&
typeof element.name === 'string' &&
(element.name.includes('}oMath') || element.name.includes('}oMathPara'))) {
console.log('🎉 捕获 oMath 元素:', element);
const text = extractMathText(element).trim();
return {
type: 'element',
name: 'span',
attributes: [{ name: 'class', value: 'math-formula' }],
children: [{ type: 'text', value: `$${text || '公式'}$` }]
};
}
if (Array.isArray(element.children)) {
element.children = element.children.map(transformOMath);
}
return element;
}
function extractMathText(element) {
if (!element) return '';
if (element.type === 'text') return element.value || '';
if (element.children) {
return element.children.map(extractMathText).join('');
}
return '';
}
export default {
name: 'docInfo',
components: {
@ -505,39 +583,46 @@ export default {
};
},
methods: {
async loadDocx(url) {
try {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const arrayBuffer = await response.arrayBuffer();
// 使 mammoth-math mathmlToLatex
const result = await mammoth.convertToHtml(
{ arrayBuffer },
{
mathConverter: mathmlToLatex
}
);
//
let htmlContent = result.value.replace(
/&lt;img\s+src=["']([^"']+)["'][^&]*&gt;/gi,
(match, src) => `<img src="${src}" style="max-width:100%">`
);
this.htmlContent = htmlContent;
this.loading = false;
this.renderMath();
this.$nextTick(() => {
this.renderMath();
});
} catch (err) {
console.error('加载或解析失败:', err);
this.error = `无法加载文档: ${err.message}`;
this.loading = false;
}
},
// loadDocx
async loadDocx(url) {
try {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const arrayBuffer = await response.arrayBuffer();
// 使 this.transformOMath
const result = await mammoth.convertToHtml(
{ arrayBuffer },
{ transformDocument: transformOMath } // this.
);
console.log('转换结果:', result);
let htmlContent = result.value;
//
htmlContent = htmlContent.replace(
/&lt;img\s+src=["']([^"']+)["'][^&]*&gt;/gi,
'<img src="$1" style="max-width:100%;">'
);
this.htmlContent = htmlContent;
this.loading = false;
this.$nextTick(() => {
this.renderMath();
});
} catch (err) {
console.error('加载或解析失败:', err);
this.error = `无法加载文档: ${err.message}`;
this.loading = false;
}
},
// loadDocx(url) {
// // url = "http://localhost/dev-api/api/docxFile/ .docx_20251029_173422/wordSplitter/CHCMCL.docx";
//
@ -1181,37 +1266,33 @@ export default {
},
async renderMath() {
try {
// startup
const { MathJax } = await import('mathjax-full/js/components/startup.js');
//
window.MathJax = MathJax;
MathJax.config = {
loader: { load: ['input/tex', 'output/chtml'] },
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']],
displayMath: [['$$', '$$'], ['\\[', '\\]']]
}
};
// 使 window.MathJax
if (!window.MathJax) {
await import('mathjax-full/es5/tex-chtml.js');
}
// promise
await MathJax.startup.promise;
console.log('✅ MathJax 初始化完成');
const MathJax = window.MathJax;
// typesetPromise
const target = this.$refs.content;
if (target && typeof window.MathJax.typesetPromise === 'function') {
await window.MathJax.typesetPromise([target]);
console.log('✅ 公式渲染成功!');
// startup
if (MathJax?.startup?.promise) {
console.log('等待 MathJax 初始化...');
await MathJax.startup.promise; // resolve
console.log('✅ MathJax 初始化完成');
}
//
if (typeof MathJax.typesetPromise === 'function') {
await MathJax.typesetPromise([this.$refs.testMath]);
console.log('✅ 公式渲染成功');
}
} catch (err) {
console.error('❌ MathJax 初始化失败', err);
console.error('❌ MathJax 渲染失败', err);
}
},
goSearch() {
this.$router.push({name: 'docList', query: {word: this.searchWord}});
},
},
mounted() {
this.getInfoInit();

4
ruoyi-ui/src/views/system/fileManage/indexNB.vue

@ -386,7 +386,9 @@
placeholder="仅限汉字或字母"></el-input>
</el-form-item>
<el-form-item style="position: relative ;" label="知识内容">
<Editor v-if="addTxt" v-model="TxtValue"></Editor>
<Editor v-if="addTxt" v-model="TxtValue">
</Editor>
</el-form-item>
</el-form>

Loading…
Cancel
Save