|
@@ -4,21 +4,30 @@
|
|
<template v-if="(confessionSessionList.length) && !addNewConversation">
|
|
<template v-if="(confessionSessionList.length) && !addNewConversation">
|
|
<div class="technicalDisclosure_model">
|
|
<div class="technicalDisclosure_model">
|
|
<div class="topMenu">
|
|
<div class="topMenu">
|
|
- <div class="margin-right_10">
|
|
|
|
- <el-button size="mini" :type="showOption.showMenu?'success':'info'" @click="showOption.showMenu = !showOption.showMenu">{{showOption.showMenu?"隐藏":"显示"}}菜单</el-button>
|
|
|
|
- <el-button size="mini" :type="showOption.showLeft?'success':'info'" @click="showOption.showLeft = !showOption.showLeft">{{showOption.showLeft?"隐藏":"显示"}}左侧</el-button>
|
|
|
|
- <el-button size="mini" :type="showOption.showRight?'success':'info'" @click="showOption.showRight = !showOption.showRight">{{showOption.showRight?"隐藏":"显示"}}右侧</el-button>
|
|
|
|
|
|
+ <div class="topMenu_left">
|
|
|
|
+ <div class="margin-right_10">
|
|
|
|
+ <el-button size="mini" :type="showOption.showMenu?'success':'info'" @click="showOption.showMenu = !showOption.showMenu">{{showOption.showMenu?"隐藏":"显示"}}菜单</el-button>
|
|
|
|
+ <el-button size="mini" :type="showOption.showLeft?'success':'info'" @click="showOption.showLeft = !showOption.showLeft">{{showOption.showLeft?"隐藏":"显示"}}左侧</el-button>
|
|
|
|
+ <el-button size="mini" :type="showOption.showRight?'success':'info'" @click="showOption.showRight = !showOption.showRight">{{showOption.showRight?"隐藏":"显示"}}右侧</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ <el-upload
|
|
|
|
+ ref="uploadConfession"
|
|
|
|
+ class="upload-demo"
|
|
|
|
+ action="#"
|
|
|
|
+ :auto-upload="false"
|
|
|
|
+ :show-file-list="false"
|
|
|
|
+ :on-change="onChangeConfession"
|
|
|
|
+ :limit="1">
|
|
|
|
+ <el-button type="primary" size="mini">切换技术交底书</el-button>
|
|
|
|
+ </el-upload>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="topMenu_right">
|
|
|
|
+ <el-button type="primary" size="mini" v-if="!editTechnical" @click="changeEditTechnical()">修改</el-button>
|
|
|
|
+ <el-button type="primary" size="mini" v-else @click="changeEditTechnical()">完成</el-button>
|
|
|
|
+ <el-button type="info" size="mini" disabled>查新检索</el-button>
|
|
|
|
+ <el-button type="info" size="mini" disabled>辅助撰写说明书</el-button>
|
|
|
|
+
|
|
</div>
|
|
</div>
|
|
- <el-upload
|
|
|
|
- ref="uploadConfession"
|
|
|
|
- class="upload-demo"
|
|
|
|
- action="#"
|
|
|
|
- :auto-upload="false"
|
|
|
|
- :show-file-list="false"
|
|
|
|
- :on-change="onChangeConfession"
|
|
|
|
- :limit="1">
|
|
|
|
- <el-button type="primary" size="mini">切换技术交底书</el-button>
|
|
|
|
- </el-upload>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="technicalDisclosure_content">
|
|
<div class="technicalDisclosure_content">
|
|
<!-- 左侧文件展示 -->
|
|
<!-- 左侧文件展示 -->
|
|
@@ -34,34 +43,309 @@
|
|
<!-- 格式化技术交底书内容 -->
|
|
<!-- 格式化技术交底书内容 -->
|
|
<div class="mainContent">
|
|
<div class="mainContent">
|
|
<!-- 技术领域 -->
|
|
<!-- 技术领域 -->
|
|
- <div class="technical_field">
|
|
|
|
- <div>
|
|
|
|
- {{ technicalContent.technicalField }}
|
|
|
|
|
|
+ <div class="technical_field content_box">
|
|
|
|
+ <div class="title">技术领域</div>
|
|
|
|
+ <div v-if="!editTechnical" class="text">
|
|
|
|
+ {{ technicalContent.technicalField}}
|
|
</div>
|
|
</div>
|
|
- <div>
|
|
|
|
- <el-input type="textarea" v-model="editTechnicalContent.technicalField" placeholder="请输入技术领域"></el-input>
|
|
|
|
|
|
+ <div v-else>
|
|
|
|
+ <el-input type="textarea" v-model="editTechnicalContent.technicalField" placeholder="请输入技术领域" @change="saveTechnicalContent"></el-input>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 技术问题 -->
|
|
<!-- 技术问题 -->
|
|
- <div class="technical_issue">
|
|
|
|
-
|
|
|
|
|
|
+ <div class="technical_issue content_box">
|
|
|
|
+ <div class="title">技术问题</div>
|
|
|
|
+ <div v-if="!editTechnical">
|
|
|
|
+ <div v-for="(item,index) in technicalContent.technicalCase" :key="index" class="technical_issue_item">
|
|
|
|
+ <div class="delBtn">
|
|
|
|
+ <el-button class="delTextBtn" type="text" @click="delData('technicalCase',technicalContent.technicalCase,index)">删除技术问题</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text"><span class="childTitle">技术问题:</span>{{ item.technicalProblem }}</div>
|
|
|
|
+ <div class="technical_means">
|
|
|
|
+ <div class="title">技术手段:</div>
|
|
|
|
+ <div v-for="(mean,inde) in item.technicalMeans" :key="'mean'+inde" class="technical_means_item">
|
|
|
|
+ <div class="delBtn2">
|
|
|
|
+ <el-button class="delTextBtn" type="text" @click="delData('technicalMeans',item.technicalMeans,inde)">删除技术手段</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text"><span class="childTitle">技术手段内容:</span>{{ mean.technicalMeansContent }}</div>
|
|
|
|
+ <div class="text"><span class="childTitle">实现方式:</span>{{ mean.ImplementationMethod }}</div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ <div class="childTitle">有益效果:</div>
|
|
|
|
+ <div>
|
|
|
|
+ <ol>
|
|
|
|
+ <li v-for="(effect,effectIndex) in mean.technicalEffect" :key="'effect'+effectIndex">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <div>{{ effect }}</div>
|
|
|
|
+ <div class="editBtn hideEditBtn">
|
|
|
|
+ <i class="el-icon-delete margin-right_10" @click="delData('technicalEffect',mean.technicalEffect,effectIndex)"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="inde != item.technicalMeans.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="index != technicalContent.technicalCase.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>
|
|
|
|
+ <div v-for="(item,index) in editTechnicalContent.technicalCase" :key="index" class="technical_issue_item technical_issue_item_edit">
|
|
|
|
+ <div class="delBtn">
|
|
|
|
+ <el-button class="delTextBtn" type="text" @click="delData('technicalCase',editTechnicalContent.technicalCase,index)">删除技术问题</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text flex_content">
|
|
|
|
+ <div class="childTitle">技术问题:</div>
|
|
|
|
+ <el-input type="textarea" v-model="item.technicalProblem" placeholder="请输入技术问题" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="technical_means">
|
|
|
|
+ <div class="title">技术手段:</div>
|
|
|
|
+ <div v-for="(mean,inde) in item.technicalMeans" :key="'mean'+inde" class="technical_means_item">
|
|
|
|
+ <div class="delBtn2">
|
|
|
|
+ <el-button class="delTextBtn" type="text" @click="delData('technicalMeans',item.technicalMeans,inde)">删除技术手段</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text flex_content">
|
|
|
|
+ <div class="childTitle">技术手段内容:</div>
|
|
|
|
+ <el-input type="textarea" v-model="mean.technicalMeansContent" placeholder="请输入技术手段内容" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text flex_content">
|
|
|
|
+ <div class="childTitle">实现方式:</div>
|
|
|
|
+ <el-input type="textarea" v-model="mean.ImplementationMethod" placeholder="请输入实现方式" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ <div class="childTitle">有益效果:</div>
|
|
|
|
+ <div>
|
|
|
|
+ <ol v-if="mean.technicalEffect && mean.technicalEffect.length">
|
|
|
|
+ <li v-for="(effect,effectIndex) in mean.technicalEffect" :key="'effect'+effectIndex">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <el-input type="textarea" v-model="mean.technicalEffect[effectIndex]" placeholder="请输入有益效果" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ <div class="editBtn">
|
|
|
|
+ <i class="el-icon-delete margin-right_10" @click="delData('technicalEffect',mean.technicalEffect,effectIndex)"></i>
|
|
|
|
+ <i v-if="effectIndex == mean.technicalEffect.length-1" class="el-icon-plus" @click="addData('technicalEffect',mean.technicalEffect)"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ <div v-else class="addBtn text" @click="addData('technicalEffect',mean.technicalEffect)">
|
|
|
|
+ <i class="el-icon-plus"></i>
|
|
|
|
+ <span>有益效果</span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="inde != item.technicalMeans.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="addBtn text" @click="addData('technicalMeans',item.technicalMeans)">
|
|
|
|
+ <i class="el-icon-plus"></i>
|
|
|
|
+ <span>技术手段</span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="index != editTechnicalContent.technicalCase.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div class="addBtn text" @click="addData('technicalCase',editTechnicalContent.technicalCase)">
|
|
|
|
+ <i class="el-icon-plus"></i>
|
|
|
|
+ <span>技术问题</span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
</div>
|
|
</div>
|
|
<!-- 技术特征 -->
|
|
<!-- 技术特征 -->
|
|
- <div class="technical_features"></div>
|
|
|
|
|
|
+ <div class="technical_features content_box">
|
|
|
|
+ <div class="title">技术特征</div>
|
|
|
|
+ <div class="text" v-if="!editTechnical">
|
|
|
|
+ <div>
|
|
|
|
+ <ol>
|
|
|
|
+ <li v-for="(item,index) in technicalContent.technicalFeature" :key="item">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <div>{{ item }}</div>
|
|
|
|
+ <div class="editBtn hideEditBtn">
|
|
|
|
+ <i class="el-icon-delete margin-right_10" @click="delData('technicalFeature',technicalContent.technicalFeature,index)"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>
|
|
|
|
+ <div>
|
|
|
|
+ <ol v-if="editTechnicalContent.technicalFeature && editTechnicalContent.technicalFeature.length">
|
|
|
|
+ <li v-for="(item,index) in editTechnicalContent.technicalFeature" :key="'feature'+index">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <el-input type="textarea" v-model="editTechnicalContent.technicalFeature[index]" placeholder="请输入技术特征" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ <div class="editBtn">
|
|
|
|
+ <i class="el-icon-delete margin-right_10" @click="delData('technicalFeature',editTechnicalContent.technicalFeature,index)"></i>
|
|
|
|
+ <i v-if="index == editTechnicalContent.technicalFeature.length-1" class="el-icon-plus" @click="addData('technicalFeature',editTechnicalContent.technicalFeature)"></i>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ <div v-else class="addBtn text" @click="addData('technicalFeature',editTechnicalContent.technicalFeature)">
|
|
|
|
+ <i class="el-icon-plus"></i>
|
|
|
|
+ <span>技术特征</span>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<!-- 背景技术 -->
|
|
<!-- 背景技术 -->
|
|
- <div class="background_technology"></div>
|
|
|
|
|
|
+ <div class="background_technology content_box">
|
|
|
|
+ <div class="title">背景技术</div>
|
|
|
|
+ <div v-if="!editTechnical">
|
|
|
|
+ {{ technicalContent.background }}
|
|
|
|
+ </div>
|
|
|
|
+ <div v-else>
|
|
|
|
+ <el-input type="textarea" v-model="editTechnicalContent.background" placeholder="请输入背景技术" @change="saveTechnicalContent"></el-input>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<!-- 术语解释 -->
|
|
<!-- 术语解释 -->
|
|
- <div class="terminology_explanation"></div>
|
|
|
|
- <!-- 权要建议 -->
|
|
|
|
- <div class="layout_suggestions"></div>
|
|
|
|
- <!-- 缺失内容 -->
|
|
|
|
- <div></div>
|
|
|
|
|
|
+ <div class="terminology_explanation content_box">
|
|
|
|
+ <div class="title">术语解释</div>
|
|
|
|
+ <div>
|
|
|
|
+ <div v-for="(item,index) in technicalContent.termsExplanation" :key="index" class="terminology_explanation_item">
|
|
|
|
+ <div class="childTitle">{{ item.terms }}</div>
|
|
|
|
+ <div class="text">{{ item.explanation }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 布局建议 -->
|
|
|
|
+ <div class="layout_suggestions content_box">
|
|
|
|
+ <div class="title">布局建议</div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ <p v-if="technicalContent.claimSuggestions.mainClaimSuggestions">
|
|
|
|
+ <span class="childTitle">独权建议:</span> {{technicalContent.claimSuggestions.mainClaimSuggestions}}
|
|
|
|
+ </p>
|
|
|
|
+ <p v-if="technicalContent.claimSuggestions.dependentClaimSuggestions">
|
|
|
|
+ <span class="childTitle">从权建议:</span>{{technicalContent.claimSuggestions.dependentClaimSuggestions}}
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
<!-- 补充建议 -->
|
|
<!-- 补充建议 -->
|
|
- <div></div>
|
|
|
|
|
|
+ <div class="supply_suggestions content_box">
|
|
|
|
+ <div class="title">补充建议</div>
|
|
|
|
+ <div>
|
|
|
|
+ {{ technicalContent.additionalSuggestions || '无' }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 空白 -->
|
|
|
|
+ <div class="kongbai"></div>
|
|
</div>
|
|
</div>
|
|
<!-- AI对话框 -->
|
|
<!-- AI对话框 -->
|
|
- <div class="AIChat">
|
|
|
|
-
|
|
|
|
|
|
+ <div class="AIChat" :style="showHistory?'height:100%':'height:auto'">
|
|
|
|
+ <xiaoshiAI style="width:100%;max-width:100%" :slotDataFunction="slotDataFunction" :chat_id="chat_id" :params="AIParams" :API_KEY="API_KEY" :chatApi="chat_api" :defaultShowHistory="showHistory" @getShowHistory="getShowHistory" @getConversationId="getConversationId">
|
|
|
|
+ <template slot="questionBtn">
|
|
|
|
+ <div>
|
|
|
|
+ <el-button size="mini" :type="AIModel=='chat'?'success':'info'" round @click="changeAIModel('chat')">AI对话</el-button>
|
|
|
|
+ <el-button size="mini" :type="AIModel=='edit'?'success':'info'" round @click="changeAIModel('edit')">AI修改</el-button>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="AIModel == 'edit'" v-slot:answer="data">
|
|
|
|
+ <div class="mainContent">
|
|
|
|
+ <!-- 技术领域 -->
|
|
|
|
+ <div class="technical_field content_box">
|
|
|
|
+ <div class="title">技术领域</div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ {{ data.data.technicalField }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 技术问题 -->
|
|
|
|
+ <div class="technical_issue content_box">
|
|
|
|
+ <div class="title">技术问题</div>
|
|
|
|
+ <div>
|
|
|
|
+ <div v-for="(item,index) in data.data.technicalCase" :key="index" class="technical_issue_item">
|
|
|
|
+ <div class="text"><span class="childTitle">技术问题:</span>{{ item.technicalProblem }}</div>
|
|
|
|
+ <div class="technical_means">
|
|
|
|
+ <div class="title">技术手段:</div>
|
|
|
|
+ <div v-for="(mean,inde) in item.technicalMeans" :key="'mean'+inde" class="technical_means_item">
|
|
|
|
+ <div class="text"><span class="childTitle">技术手段内容:</span>{{ mean.technicalMeansContent }}</div>
|
|
|
|
+ <div class="text"><span class="childTitle">实现方式:</span>{{ mean.ImplementationMethod }}</div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ <div class="childTitle">有益效果:</div>
|
|
|
|
+ <div>
|
|
|
|
+ <ol>
|
|
|
|
+ <li v-for="(effect,effectIndex) in mean.technicalEffect" :key="'effect'+effectIndex">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <div>{{ effect }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="inde != item.technicalMeans.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <div v-if="index != data.data.technicalCase.length-1">
|
|
|
|
+ <hr/>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 技术特征 -->
|
|
|
|
+ <div class="technical_features content_box">
|
|
|
|
+ <div class="title">技术特征</div>
|
|
|
|
+ <div class="text" >
|
|
|
|
+ <div>
|
|
|
|
+ <ol>
|
|
|
|
+ <li v-for="(item,index) in data.data.technicalFeature" :key="'feature' + index">
|
|
|
|
+ <div class="li_content">
|
|
|
|
+ <div>{{ item }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </li>
|
|
|
|
+ </ol>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 背景技术 -->
|
|
|
|
+ <div class="background_technology content_box">
|
|
|
|
+ <div class="title">背景技术</div>
|
|
|
|
+ <div>
|
|
|
|
+ {{ data.data.background }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 术语解释 -->
|
|
|
|
+ <div class="terminology_explanation content_box">
|
|
|
|
+ <div class="title">术语解释</div>
|
|
|
|
+ <div>
|
|
|
|
+ <div v-for="(item,index) in data.data.termsExplanation" :key="index" class="terminology_explanation_item">
|
|
|
|
+ <div class="childTitle">{{ item.terms }}</div>
|
|
|
|
+ <div class="text">{{ item.explanation }}</div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 布局建议 -->
|
|
|
|
+ <div class="layout_suggestions content_box">
|
|
|
|
+ <div class="title">布局建议</div>
|
|
|
|
+ <div class="text">
|
|
|
|
+ <p v-if="data.data.claimSuggestions.mainClaimSuggestions">
|
|
|
|
+ <span class="childTitle">独权建议:</span> {{data.data.claimSuggestions.mainClaimSuggestions}}
|
|
|
|
+ </p>
|
|
|
|
+ <p v-if="data.data.claimSuggestions.dependentClaimSuggestions">
|
|
|
|
+ <span class="childTitle">从权建议:</span>{{data.data.claimSuggestions.dependentClaimSuggestions}}
|
|
|
|
+ </p>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ <!-- 补充建议 -->
|
|
|
|
+ <div class="supply_suggestions content_box">
|
|
|
|
+ <div class="title">补充建议</div>
|
|
|
|
+ <div>
|
|
|
|
+ {{ data.data.additionalSuggestions || '无' }}
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ <template v-if="AIModel == 'edit'" v-slot:messageBtn="data">
|
|
|
|
+ <div @click="ying">
|
|
|
|
+ 应用
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+ </xiaoshiAI>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -105,6 +389,8 @@ export default {
|
|
},
|
|
},
|
|
data() {
|
|
data() {
|
|
return {
|
|
return {
|
|
|
|
+ chat_api:'/api/xiaoshi/dify/generateDiscoveryResult/dialogue',
|
|
|
|
+ API_KEY:'',
|
|
confession:{},
|
|
confession:{},
|
|
//参考vabOnlyOffice组件参数配置
|
|
//参考vabOnlyOffice组件参数配置
|
|
option: {
|
|
option: {
|
|
@@ -122,9 +408,9 @@ export default {
|
|
show:false,
|
|
show:false,
|
|
loading:false,
|
|
loading:false,
|
|
chat_id:'',
|
|
chat_id:'',
|
|
- loading2:false,
|
|
|
|
AIParams:{
|
|
AIParams:{
|
|
- confessionSessionId:null
|
|
|
|
|
|
+ confessionSessionId:null,
|
|
|
|
+ type:31
|
|
},
|
|
},
|
|
confessionSessionList:[],
|
|
confessionSessionList:[],
|
|
addNewConversation:false,
|
|
addNewConversation:false,
|
|
@@ -135,23 +421,56 @@ export default {
|
|
showRight:true
|
|
showRight:true
|
|
},
|
|
},
|
|
technicalContent:{
|
|
technicalContent:{
|
|
- technicalField:'技术领域',
|
|
|
|
- technicalIssue:[
|
|
|
|
|
|
+ technicalField:'技术领域11',
|
|
|
|
+ technicalCase:[
|
|
|
|
+ {
|
|
|
|
+ technicalProblem:'技术问题11',
|
|
|
|
+ technicalMeans:[
|
|
|
|
+ {
|
|
|
|
+ technicalMeansContent:'技术手段内容111',
|
|
|
|
+ ImplementationMethod:'实现方式1111',
|
|
|
|
+ technicalEffect:["有益效果11"]
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ technicalMeansContent:'技术手段内容1',
|
|
|
|
+ ImplementationMethod:'实现方式1',
|
|
|
|
+ technicalEffect:["有益效果1"]
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
|
|
+ },
|
|
{
|
|
{
|
|
- question:'技术问题',
|
|
|
|
- means:[
|
|
|
|
|
|
+ technicalProblem:'技术问题22',
|
|
|
|
+ technicalMeans:[
|
|
{
|
|
{
|
|
- content:'技术手段内容'
|
|
|
|
|
|
+ technicalMeansContent:'技术手段内容222',
|
|
|
|
+ ImplementationMethod:'实现方式122',
|
|
|
|
+ technicalEffect:["有益效果2"]
|
|
}
|
|
}
|
|
]
|
|
]
|
|
}
|
|
}
|
|
],
|
|
],
|
|
- technicalFeatures:[],
|
|
|
|
- backgroundTechnology:'',
|
|
|
|
- terminologyExplanation:[],
|
|
|
|
- layoutSuggestions:'',
|
|
|
|
|
|
+ technicalFeature:['特征1','特征2'],
|
|
|
|
+ background:'背景技术',
|
|
|
|
+ termsExplanation:[
|
|
|
|
+ {
|
|
|
|
+ terms:'术语1',
|
|
|
|
+ explanation:'术语1的解释'
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ terms:'术语2',
|
|
|
|
+ explanation:'术语2的解释'
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ claimSuggestions:{
|
|
|
|
+ mainClaimSuggestions:'独权建议1',
|
|
|
|
+ dependentClaimSuggestions:'从权建议1'
|
|
|
|
+ },
|
|
|
|
+ additionalSuggestions:'补充建议'
|
|
},
|
|
},
|
|
editTechnicalContent:{},
|
|
editTechnicalContent:{},
|
|
|
|
+ editTechnical:false,
|
|
|
|
+ showHistory:false,
|
|
|
|
+ AIModel:'chat'
|
|
};
|
|
};
|
|
},
|
|
},
|
|
watch: {
|
|
watch: {
|
|
@@ -165,9 +484,81 @@ export default {
|
|
|
|
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
|
|
+ slotDataFunction(){
|
|
|
|
+ return (val)=>{
|
|
|
|
+ let obj = {}
|
|
|
|
+ try{
|
|
|
|
+ obj = JSON.parse(val)
|
|
|
|
+ }catch{}
|
|
|
|
+ return obj
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+ getShowHistory(val){
|
|
|
|
+ this.showHistory = val
|
|
|
|
+ },
|
|
|
|
+ changeAIModel(val){
|
|
|
|
+ this.AIModel = val
|
|
|
|
+ if(this.AIModel == 'chat'){
|
|
|
|
+ this.chat_id = this.currentConversation.dialogueConversationId
|
|
|
|
+ }else if(this.AIModel == 'edit'){
|
|
|
|
+ this.chat_id = this.currentConversation.aiUpdateConversationId
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ addData(field,parentData){
|
|
|
|
+ switch(field){
|
|
|
|
+ case 'technicalCase':
|
|
|
|
+ parentData.push(
|
|
|
|
+ {
|
|
|
|
+ technicalProblem:'',
|
|
|
|
+ technicalMeans:[]
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ break
|
|
|
|
+ case 'technicalMeans':
|
|
|
|
+ parentData.push(
|
|
|
|
+ {
|
|
|
|
+ technicalEffect:[]
|
|
|
|
+ }
|
|
|
|
+ )
|
|
|
|
+ break;
|
|
|
|
+ case 'technicalEffect':
|
|
|
|
+ parentData.push('')
|
|
|
|
+ break;
|
|
|
|
+ case 'technicalFeature':
|
|
|
|
+ parentData.push('')
|
|
|
|
+ break
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ delData(field,parentData,index){
|
|
|
|
+ parentData.splice(index,1)
|
|
|
|
+ },
|
|
|
|
+ saveTechnicalContent(){
|
|
|
|
+ var params = {
|
|
|
|
+ confessionSessionId:this.currentConversation.id,
|
|
|
|
+ discoveryResult:JSON.stringify(this.editTechnicalContent)
|
|
|
|
+ }
|
|
|
|
+ this.$api.updateDiscoveryResult(params).then(response=>{
|
|
|
|
+ if(response.code == 200){
|
|
|
|
+ this.$message.success('修改成功')
|
|
|
|
+ this.technicalContent = JSON.parse(JSON.stringify(this.editTechnicalContent))
|
|
|
|
+ }
|
|
|
|
+ }).catch(error=>{
|
|
|
|
+ this.editTechnicalContent = JSON.parse(JSON.stringify(this.technicalContent))
|
|
|
|
+ })
|
|
|
|
+
|
|
|
|
+ },
|
|
|
|
+ changeEditTechnical(){
|
|
|
|
+ if(this.editTechnical){
|
|
|
|
+ this.editTechnical = false
|
|
|
|
+ this.editTechnicalContent = {}
|
|
|
|
+ }else{
|
|
|
|
+ this.editTechnical = true
|
|
|
|
+ this.editTechnicalContent = JSON.parse(JSON.stringify(this.technicalContent))
|
|
|
|
+ }
|
|
|
|
+ },
|
|
//打开新对话
|
|
//打开新对话
|
|
addConversation(){
|
|
addConversation(){
|
|
- this.$set(this,'loading2',false)
|
|
|
|
this.$set(this,'addNewConversation',true)
|
|
this.$set(this,'addNewConversation',true)
|
|
this.currentConversation = {}
|
|
this.currentConversation = {}
|
|
},
|
|
},
|
|
@@ -205,17 +596,29 @@ export default {
|
|
this.queryConfessionSession(true)
|
|
this.queryConfessionSession(true)
|
|
},
|
|
},
|
|
//切换会话
|
|
//切换会话
|
|
- changeConversation(obj){
|
|
|
|
|
|
+ async changeConversation(obj){
|
|
if(obj.id == this.currentConversation.id){
|
|
if(obj.id == this.currentConversation.id){
|
|
this.currentConversation = obj
|
|
this.currentConversation = obj
|
|
return
|
|
return
|
|
}
|
|
}
|
|
this.currentConversation = obj
|
|
this.currentConversation = obj
|
|
this.AIParams.confessionSessionId = obj.id
|
|
this.AIParams.confessionSessionId = obj.id
|
|
- this.confession = obj.systemFile || {}
|
|
|
|
- this.getOption()
|
|
|
|
- this.chat_id = obj.conversationId
|
|
|
|
|
|
+ if(this.AIModel == 'chat'){
|
|
|
|
+ this.AIParams.type = 31
|
|
|
|
+ }else if(this.AIModel == 'edit'){
|
|
|
|
+ this.AIParams.type = 32
|
|
|
|
+ }
|
|
this.$set(this,'addNewConversation',false)
|
|
this.$set(this,'addNewConversation',false)
|
|
|
|
+ if(!this.currentConversation.discoveryResult){
|
|
|
|
+ await this.getDiscoveryResultDetail()
|
|
|
|
+ }
|
|
|
|
+ if(this.currentConversation.discoveryFiles && this.currentConversation.discoveryFiles.length){
|
|
|
|
+ this.confession = this.currentConversation.discoveryFiles[0]
|
|
|
|
+ }else{
|
|
|
|
+ this.confession = {}
|
|
|
|
+ }
|
|
|
|
+ this.getOption()
|
|
|
|
+
|
|
},
|
|
},
|
|
//上传技术交底书
|
|
//上传技术交底书
|
|
onChangeConfession(file){
|
|
onChangeConfession(file){
|
|
@@ -233,7 +636,7 @@ export default {
|
|
this.$refs.uploadConfession.clearFiles()
|
|
this.$refs.uploadConfession.clearFiles()
|
|
var params = {
|
|
var params = {
|
|
fileGuid:guid,
|
|
fileGuid:guid,
|
|
- type:0
|
|
|
|
|
|
+ type:3
|
|
}
|
|
}
|
|
this.$api.addConfessionSession(params).then(response=>{
|
|
this.$api.addConfessionSession(params).then(response=>{
|
|
if(response.code == 200){
|
|
if(response.code == 200){
|
|
@@ -252,7 +655,7 @@ export default {
|
|
//查询技术交底书会话记录
|
|
//查询技术交底书会话记录
|
|
queryConfessionSession(onlyQuery){
|
|
queryConfessionSession(onlyQuery){
|
|
var params = {
|
|
var params = {
|
|
- type:0
|
|
|
|
|
|
+ type:3
|
|
}
|
|
}
|
|
this.$api.queryConfessionSession(params).then(response=>{
|
|
this.$api.queryConfessionSession(params).then(response=>{
|
|
if(response.code == 200){
|
|
if(response.code == 200){
|
|
@@ -290,23 +693,70 @@ export default {
|
|
if(this.chat_id){
|
|
if(this.chat_id){
|
|
return
|
|
return
|
|
}
|
|
}
|
|
- var params = {
|
|
|
|
- confessionSessionId:this.currentConversation.id
|
|
|
|
- }
|
|
|
|
- this.$api.queryConfessionSession(params).then(response=>{
|
|
|
|
- if(response.code == 200){
|
|
|
|
- let data = response.data || []
|
|
|
|
- if(data.length>0){
|
|
|
|
- let obj = data[0]
|
|
|
|
- this.chat_id = obj.conversationId
|
|
|
|
- this.updateConversationByField('conversationId',this.chat_id)
|
|
|
|
|
|
+ this.getDiscoveryResultDetail(1)
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ //获取生成的技术交底书理解结果
|
|
|
|
+ async getDiscoveryResultDetail(type){
|
|
|
|
+ var params = {
|
|
|
|
+ confessionSessionId:this.currentConversation.id
|
|
|
|
+ }
|
|
|
|
+ await this.$api.discoveryResultDetail(params).then(response=>{
|
|
|
|
+ if(response.code == 200){
|
|
|
|
+ let data = response.data || {}
|
|
|
|
+ if(type){
|
|
|
|
+ this.currentConversation.dialogueConversationId= data.dialogueConversationId
|
|
|
|
+ this.currentConversation.aiUpdateConversationId= data.aiUpdateConversationId
|
|
|
|
+ // 获取当前ai会话id
|
|
|
|
+ this.changeAIModel(this.AIModel)
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ this.currentConversation = {
|
|
|
|
+ ...this.currentConversation,
|
|
|
|
+ ...data
|
|
|
|
+ }
|
|
|
|
+ //获取生成的结果
|
|
|
|
+ if(data.discoveryResult){
|
|
|
|
+ try{
|
|
|
|
+ this.technicalContent = JSON.parse(data.discoveryResult)
|
|
|
|
+ }catch{
|
|
|
|
+ this.technicalContent = {
|
|
|
|
+ technicalField:'',
|
|
|
|
+ technicalCase:[],
|
|
|
|
+ technicalFeature:[],
|
|
|
|
+ background:'',
|
|
|
|
+ termsExplanation:[],
|
|
|
|
+ claimSuggestions:{},
|
|
|
|
+ additionalSuggestions:''
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }else{
|
|
|
|
+ this.technicalContent = {
|
|
|
|
+ technicalField:'',
|
|
|
|
+ technicalCase:[],
|
|
|
|
+ technicalFeature:[],
|
|
|
|
+ background:'',
|
|
|
|
+ termsExplanation:[],
|
|
|
|
+ claimSuggestions:{},
|
|
|
|
+ additionalSuggestions:''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- })
|
|
|
|
|
|
+ // 获取当前ai会话id
|
|
|
|
+ this.changeAIModel(this.AIModel)
|
|
|
|
+ }
|
|
|
|
+ }).catch(error=>{
|
|
|
|
+ // this.technicalContent = {
|
|
|
|
+ // technicalField:'',
|
|
|
|
+ // technicalCase:[],
|
|
|
|
+ // technicalFeature:[],
|
|
|
|
+ // background:'',
|
|
|
|
+ // termsExplanation:[],
|
|
|
|
+ // claimSuggestions:{},
|
|
|
|
+ // additionalSuggestions:''
|
|
|
|
+ // }
|
|
|
|
+ })
|
|
},
|
|
},
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
//获取onlyoffice需要的内容
|
|
//获取onlyoffice需要的内容
|
|
getOption(){
|
|
getOption(){
|
|
if(!this.confession.guid){
|
|
if(!this.confession.guid){
|
|
@@ -351,7 +801,7 @@ export default {
|
|
height: calc(100% - 40px);
|
|
height: calc(100% - 40px);
|
|
}
|
|
}
|
|
.left{
|
|
.left{
|
|
- width:50%;
|
|
|
|
|
|
+ width:40%;
|
|
height:calc(100% - 0px);
|
|
height:calc(100% - 0px);
|
|
padding-right: 10px;
|
|
padding-right: 10px;
|
|
text-align: center;
|
|
text-align: center;
|
|
@@ -370,10 +820,15 @@ export default {
|
|
height: 30px;
|
|
height: 30px;
|
|
display: flex;
|
|
display: flex;
|
|
align-items: center;
|
|
align-items: center;
|
|
|
|
+ justify-content: space-between;
|
|
padding-bottom: 10px;
|
|
padding-bottom: 10px;
|
|
i{
|
|
i{
|
|
font-size: 20px;
|
|
font-size: 20px;
|
|
}
|
|
}
|
|
|
|
+ .topMenu_left{
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
.line{
|
|
.line{
|
|
width:2px;
|
|
width:2px;
|
|
@@ -381,13 +836,177 @@ export default {
|
|
background: #e6e6e6;
|
|
background: #e6e6e6;
|
|
}
|
|
}
|
|
.right{
|
|
.right{
|
|
- width:calc(100% - 50% - 2px);
|
|
|
|
- min-width: 450px;
|
|
|
|
- height:100%;
|
|
|
|
- padding-left: 10px;
|
|
|
|
- display: flex;
|
|
|
|
- flex-direction: column;
|
|
|
|
-
|
|
|
|
|
|
+ width:calc(100% - 40% - 2px);
|
|
|
|
+ min-width: 450px;
|
|
|
|
+ height:100%;
|
|
|
|
+ padding-left: 10px;
|
|
|
|
+ display: flex;
|
|
|
|
+ flex-direction: column;
|
|
|
|
+ position: relative;
|
|
|
|
+ .mainContent{
|
|
|
|
+ width: calc(100% - 10px);
|
|
|
|
+ padding:0 10px;
|
|
|
|
+ height:calc(100% - 0px);
|
|
|
|
+ overflow-y: auto;
|
|
|
|
+ &>*{
|
|
|
|
+ padding: 5px 0;
|
|
|
|
+ }
|
|
|
|
+ .content_box{
|
|
|
|
+ padding: 15px 5px 5px 10px;
|
|
|
|
+ margin-bottom: 30px;
|
|
|
|
+ box-shadow: 0px 1px 3px 0 #000;
|
|
|
|
+ position: relative;
|
|
|
|
+ &:empty{
|
|
|
|
+ box-shadow:none
|
|
|
|
+ }
|
|
|
|
+ &:first-child{
|
|
|
|
+ margin-top: 15px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ .title{
|
|
|
|
+ font-weight: bolder;
|
|
|
|
+ font-size: 18px;
|
|
|
|
+ height:20px;
|
|
|
|
+ background: white;
|
|
|
|
+ padding: 2px;
|
|
|
|
+ position: absolute;
|
|
|
|
+ top: -17px;
|
|
|
|
+ left: 10px;
|
|
|
|
+ }
|
|
|
|
+ .childTitle{
|
|
|
|
+ font-weight: bolder;
|
|
|
|
+ }
|
|
|
|
+ .text{
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ padding: 3px 0;
|
|
|
|
+ }
|
|
|
|
+ .flex_content{
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ .childTitle{
|
|
|
|
+ flex:none;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ ol{
|
|
|
|
+ margin: 3px 0;
|
|
|
|
+ li{
|
|
|
|
+ margin: 3px 0;
|
|
|
|
+ .li_content{
|
|
|
|
+ display: flex;
|
|
|
|
+ align-items: center;
|
|
|
|
+ .editBtn{
|
|
|
|
+ flex: none;
|
|
|
|
+ width: 50px;
|
|
|
|
+ margin-left:10px;
|
|
|
|
+ }
|
|
|
|
+ .hideEditBtn{
|
|
|
|
+ width: 30px;
|
|
|
|
+ opacity: 0;
|
|
|
|
+ pointer-events: none;
|
|
|
|
+ }
|
|
|
|
+ i{
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ }
|
|
|
|
+ .el-icon-delete{
|
|
|
|
+ color: red;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ &:hover{
|
|
|
|
+ .hideEditBtn{
|
|
|
|
+ opacity: 1;
|
|
|
|
+ pointer-events:all;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .addBtn{
|
|
|
|
+ padding: 5px 10px;
|
|
|
|
+ margin: 0 auto;
|
|
|
|
+ display: flex;
|
|
|
|
+ justify-content: center;
|
|
|
|
+ align-items: center;
|
|
|
|
+ border: 1px solid green;
|
|
|
|
+ width: fit-content;
|
|
|
|
+ border-radius:20px;
|
|
|
|
+ font-weight: bold;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ }
|
|
|
|
+ .technical_issue{
|
|
|
|
+ .technical_issue_item{
|
|
|
|
+ margin-bottom: 15px;
|
|
|
|
+ .delBtn{
|
|
|
|
+ display: none;
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
+ align-items: center;
|
|
|
|
+ height: 25px;
|
|
|
|
+ .delTextBtn{
|
|
|
|
+ color: red;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ &:hover{
|
|
|
|
+ .delBtn{
|
|
|
|
+ display: flex;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .technical_means_item{
|
|
|
|
+ .delBtn2{
|
|
|
|
+ display: none;
|
|
|
|
+ justify-content: flex-end;
|
|
|
|
+ align-items: center;
|
|
|
|
+ height: 25px;
|
|
|
|
+ .delTextBtn{
|
|
|
|
+ color: red;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ &:hover{
|
|
|
|
+ .delBtn2{
|
|
|
|
+ display: flex;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .technical_issue_item_edit{
|
|
|
|
+ .delBtn{
|
|
|
|
+ display: flex;
|
|
|
|
+ }
|
|
|
|
+ .technical_means_item{
|
|
|
|
+ .delBtn2{
|
|
|
|
+ display: flex;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .technical_means{
|
|
|
|
+ margin-top: 20px;
|
|
|
|
+ position: relative;
|
|
|
|
+ border:1px dashed black;
|
|
|
|
+ padding: 10px;
|
|
|
|
+ .title{
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ }
|
|
|
|
+ .text{
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ }
|
|
|
|
+ .technical_means_item{
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .terminology_explanation{
|
|
|
|
+ .terminology_explanation_item{
|
|
|
|
+ margin-bottom: 15px;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ .kongbai{
|
|
|
|
+ height:176px
|
|
|
|
+ }
|
|
|
|
+ .AIChat{
|
|
|
|
+ width: 100%;
|
|
|
|
+ position:absolute;
|
|
|
|
+ bottom: 5px;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
.newConversation{
|
|
.newConversation{
|
|
width:720px;
|
|
width:720px;
|