提交 4d4ad3f0 authored 作者: 安云鹏's avatar 安云鹏

优化写报

上级 32803e52
......@@ -300,7 +300,7 @@ export function useMarkdownStream() {
// content = content.replace(/==(\d+)、==/g, (match, p1) => {
// return `<button class="clause-ref-btn" data-clause="${p1}">${p1}</button>`
// })
console.log(content,11223)
content = content.replace(/==\s*(\d+)、.*?==/g, (match, p1) => {
return `<button class="clause-ref-btn" data-clause="${match.replace(/==/g, '') }">${p1}</button>`;
});
......
......@@ -134,6 +134,7 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
this.writeProgressNum=0, //写报 假进度
this.tabList[1].active=false
this.tabList[2].active=false
this.reportContent=''
},
backToInputAndClear() {
......@@ -209,7 +210,7 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
// 停止写报
writeGenerateState(){
// this.bottomProgressNum=100
store.headerTabType='translate'
this.headerTabType='translate'
this.writeProgressNum=0
this.processWriteLog=''
this.tabList[2].active=false
......@@ -564,6 +565,7 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
updateFlushIndexByBoundary();
flushToReport(false);
console.log(streamBuffer,456)
console.log(msgData,'data')
} else {
// 结束时把剩余内容强制 flush
flushToReport(true);
......@@ -621,7 +623,6 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
// ========== 业务入口 ==========
async generateReport() {
console.log(77777)
this.bottomProgressNum=1
if (Object.keys(this.routeQuery).length !== 0) {
// 路由参数优先
......@@ -646,7 +647,7 @@ export const useWrittingAsstaintStore = defineStore('writtingAsstaint', {
}
// 兼容:若仅有 routeQuery 但无 fileId,则直接走原生成接口
console.log(99999)
const params = {
query: this.writtingTitle,
desc: this.descText,
......
<template>
<div class="writtingBottom">
<!-- 文档停止解析 -->
<div class="parsed" v-if="store.bottomProgressNum>0&&store.bottomProgressNum!=100&&store.writeProgressNum<10">
<div class="analysis" @click="store.resetGenerateState">
<div class="icon"></div>
......@@ -93,6 +92,7 @@ const onWriteClick=()=>{
emit("write");
}
const { renderedProcess, updateProcess, clearContent } = useStream();
const processContainerRef = ref(null);
// 监听 store.processLog 变化,更新步骤内容并滚动
......
......@@ -20,7 +20,7 @@
</div>
<div v-else>
<el-button @click="store.exportContent">导出</el-button>
<el-button @click="onExport">导出</el-button>
</div>
</div>
......@@ -36,16 +36,22 @@ import { onMounted, onUnmounted, ref, nextTick ,computed,watch} from "vue";
import { useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import { useWrittingAsstaintStore } from "@/stores/writtingAsstaintStore";
const emit = defineEmits(["onExport"]);
// 子组件直接获取Pinia Store(核心优化)
const store = useWrittingAsstaintStore();
const onTabListClick= (type,active)=>{
console.log(0)
if(!active) return
console.log(1)
store.handleHeaderTab(type)
}
const onExport=()=>{
if(store.headerTabType=='mind'){
emit('onExport')
}else if(store.headerTabType=='message'){
store.exportContent
}
}
</script>
<style lang="scss" scoped>
......
......@@ -243,8 +243,10 @@ const { renderedProcess, updateProcess, clearContent } = useStream();
watch(
() => store.highlightClauseId,
async (newId) => {
if (!newId || !translationContentRef.value) return;
console.log('789')
await nextTick();
if (!newId || !translationContentRef.value) return;
const container = translationContentRef.value;
const result = newId.replace(/^\d+、/, '');
......@@ -265,7 +267,7 @@ watch(
const delta = itemRect.top - containerRect.top;
const targetTop = container.scrollTop + delta;
console.log(delta)
// 让高亮条款的“标题区域”贴到容器顶部
container.scrollTo({
top: Math.max(0, targetTop),
......@@ -300,10 +302,7 @@ function findTextInElement(element, targetText ) {
// 清理后的文字(无标点)
const nodeClean = cleanText(originalText);
const targetClean = cleanText(targetText);
console.log(nodeClean)
console.log(targetClean)
console.log(nodeClean.includes(targetClean))
// 用干净文字对比
if (nodeClean.includes(targetClean)) {
......
......@@ -41,8 +41,8 @@ const handleGlobalClick = (e) => {
const clauseId = btn.getAttribute('data-clause');
if (clauseId) {
store.highlightClauseId = clauseId;
// 翻译栏一直显示,所以这里只需要确保它在视图内
store.isShowSteps = true;
// 翻译栏一直显示,所以这里只需要确保它在视图内
console.log(store.highlightClauseId )
}
}
......
......@@ -196,6 +196,15 @@ onMounted(() => {
})
onUnmounted(() => graph?.destroy())
function exportGraph() {
if (!graph) return
graph.downloadFullImage('思维导图.png')
}
defineExpose({
exportGraph
});
</script>
<style scoped>
......
......@@ -29,16 +29,15 @@
<IntelligenceLeftTabBar></IntelligenceLeftTabBar>
<!-- 主体区域:子组件 -->
<div style="width: 100%;">
<WrittingHeader></WrittingHeader>
<WrittingHeader @onExport="onExport"></WrittingHeader>
<div class="writting-main">
<!-- 左侧子组件:绑定ref -->
<!-- <writtingleftBox ref="leftBoxRef" @generate="handleGenerate" /> -->
<WrittingLeftBox ref="leftBoxRef" />
{{ store.isShowClauseTranslation }}-{{ store.isGenerating }}
<!-- 翻译 -->
<WrittingTranslate v-if="store.isShowClauseTranslation&&store.headerTabType=='translate'"></WrittingTranslate>
<!-- 思维导图 " -->
<WrittingMind v-else-if="store.isShowClauseTranslation&&store.headerTabType=='mind' "></WrittingMind>
<WrittingMind v-else-if="store.isShowClauseTranslation&&store.headerTabType=='mind' " ref="mindRef"></WrittingMind>
<!-- 写报 -->
<WrittingMessage v-else-if="store.isShowClauseTranslation&&store.headerTabType=='message'"></WrittingMessage>
......@@ -82,7 +81,11 @@ import WrittingMessage from "./components/WrittingMessage.vue"; //写报
const route = useRoute();
// 获取Pinia Store实例
const leftBoxRef = ref(null); // 左侧子组件ref
const mindRef=ref(null) //思维导图ref
const onExport = () => {
mindRef.value.exportGraph()
}
const store = useWrittingAsstaintStore();
// 2. 核心:触发生成流程
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论