Jelajahi Sumber

权利要求解释及有益效果和专利号导入

zhuliu 4 bulan lalu
induk
melakukan
89aedfd08f

+ 5 - 0
src/api/newApi/technicalDisclosure.js

@@ -45,4 +45,9 @@ export default {
     deleteConfessionSessions(data){
         return axios.post('/xiaoshi/confessionSession/deleteConfessionSessions', data)
     },
+
+    //添加会话记录
+    addSession(data){
+        return axios.post('/xiaoshi/confessionSession/addSession', data)
+    }
 }

+ 24 - 3
src/router/index.js

@@ -522,6 +522,16 @@ const routes = [
             },
             component: () => import('@/views/noveltySearch/components/reuseResults/index.vue'),
           },
+          
+        ]
+      },
+      //AI工具
+      {
+        path: '/AI',
+        name: 'AI',
+        component: { render(c) { return c('router-view') } },
+        redirect: '/AI',
+        children:[
           //理解技术交底书
           {
             path: '/technicalDisclosure',
@@ -529,10 +539,21 @@ const routes = [
             meta: {
               title: '理解技术交底书',
               sign: 'technicalDisclosure',
-              belong: 'AllReport',
+              belong: 'AI',
             },
-            component: () => import('@/views/noveltySearch/components/technicalDisclosure/index.vue'),
-          }
+            component: () => import('@/views/AITools/technicalDisclosure/index.vue'),
+          },
+          //权利要求解释
+          {
+            path: '/claimsExplain',
+            name: 'claimsExplain',
+            meta: {
+              title: '权利要求解释及有效说明',
+              sign: 'claimsExplain',
+              belong: 'AI',
+            },
+            component: () => import('@/views/AITools/claimsExplain/index.vue'),
+          },
         ]
       },
       //任务模块

+ 2 - 2
src/utils/model/AIHelper/index.vue

@@ -45,14 +45,14 @@
     </div> -->
     <div class="AIHelper">
         <!-- 技术交底书解析 -->
-        <div class="technicalDisclosure div_flex div_size div_border" v-show="showTechnicalDisclosure" @click="toTechnicalDisclosure">
+        <!-- <div class="technicalDisclosure div_flex div_size div_border" v-show="showTechnicalDisclosure" @click="toTechnicalDisclosure">
             <div class="icon">
                 <svg-icon class="xiaoshiIcon" iconClass="ai" iconName="ai"></svg-icon> 
             </div>
             <div class="content">
                 <div v-for="(word,index) in technicalDisclosureName" :key="`technicalDisclosure_${index}`">{{word}}</div>
             </div>
-        </div>
+        </div> -->
 
         <!-- 通用AI -->
         <div class="commonAI div_flex div_size div_border" v-show="!show" @click="clickBtn">

File diff ditekan karena terlalu besar
+ 252 - 0
src/views/AITools/claimsExplain/claimsExplain.vue


+ 26 - 0
src/views/AITools/claimsExplain/index.vue

@@ -0,0 +1,26 @@
+<template>
+  <div class="height_100">
+    <claimsExplain></claimsExplain>
+  </div>
+</template>
+
+<script>
+import claimsExplain from './claimsExplain.vue'
+export default {
+  components: {
+    claimsExplain
+  },
+  props: {},
+  data() {
+    return {
+    };
+  },
+  watch: {},
+  computed: {},
+  created() {},
+  mounted() {},
+  methods: {},
+};
+</script>
+<style lang="scss" scoped>
+</style>

+ 94 - 0
src/views/AITools/claimsExplain/mixins/index.js

@@ -0,0 +1,94 @@
+
+const api_key = 'app-fxpiWOYqtJM1BOaJnG54NlCZ'
+const url = 'https://ai.xsip.cn/v1'
+import { formatDate } from '@/utils';
+export default {
+    data() {
+        return {
+            controller:null
+        }
+    },
+    computed:{
+        userinfo(){
+            return this.$s.getObj('userinfo')
+        }
+    },
+    methods: {
+        async getResult(){
+            if(this.loading){
+                this.$message.warning('请等当前执行完成')
+                return
+            }
+            this.loading = true
+            this.result = null
+            let header = {
+                'Content-Type': 'application/json',
+                'Authorization': `Bearer ${api_key}`,
+            }
+            let data = {
+                inputs:{
+                    claim:this.claim
+                },
+                response_mode:'blocking',
+                user:this.userinfo.id
+            }
+            this.controller = new AbortController();
+            let res = await fetch(url + '/workflows/run', {
+                method: 'POST',
+                headers: header,
+                body: JSON.stringify(data),
+                signal: this.controller.signal
+            })
+            if(res.ok){
+                const reader = res.body.getReader();
+                const decoder = new TextDecoder('utf-8');
+                while (true) {
+                    const { done, value } = await reader.read();
+                    if(done){
+                        break
+                    }
+                    const chunk = decoder.decode(value);
+                    if(chunk){
+                        try{
+                            let json = JSON.parse(chunk)
+                            this.result = json.data.outputs?json.data.outputs.json:{}
+                            this.saveSession(json)
+                        }catch(e){
+                        }finally{
+                            this.loading = false
+                            this.controller = null;
+                        }
+                    }
+                }
+            }
+        },
+        cancelRun(){
+            if (this.controller) {
+                this.controller.abort();
+            }
+            this.loading = false
+        },
+        //保存会话
+        saveSession(json){
+            let data = json.data
+            let time = formatDate(new Date(),"YYYY-MM-DD HH:mm:ss")
+            let content = {
+                query:{
+                    claim:this.claim,
+                },
+                answer:data.outputs?data.outputs.json:{}
+            }
+            let params = {
+                conversationId:data.id,
+                conversationName:time+'-权利要求解释及有益效果',
+                content:JSON.stringify(content),
+                type:1
+            }
+            this.$api.addSession(params).then(response=>{
+                if(response.code == 200){
+                    this.queryConfessionSession()
+                }
+            })
+        },
+    },
+}

File diff ditekan karena terlalu besar
+ 258 - 0
src/views/AITools/components/conversationRecords.vue


src/views/noveltySearch/components/technicalDisclosure/dialog/renameConversation.vue → src/views/AITools/components/dialog/renameConversation.vue


+ 65 - 0
src/views/AITools/technicalDisclosure/dialog/renameConversation.vue

@@ -0,0 +1,65 @@
+<template>
+    <div class="responseDialog">
+      <el-dialog title="重命名会话" :visible.sync="showDialog" width="500px" :close-on-click-modal="false"  :before-close="handleClose" append-to-body>
+        
+        <div>
+            <p>会话名称</p>
+            <el-input v-model="form.conversationName" placeholder="请输入会话名称"></el-input>
+        </div>
+        <span slot="footer" class="dialog-footer">
+          <el-button @click="handleClose">取 消</el-button>
+          <el-button type="primary" @click="updateConfessionSession" >确 定</el-button>
+        </span>
+      </el-dialog>
+    </div>
+</template>
+  
+<script>
+  export default {
+    props:{},
+    data() {
+      return {
+        showDialog:false,
+        form:{}
+      }
+    },
+    watch: {
+    },
+    mounted() {
+  
+    },
+    methods: {
+        open(row){
+            this.form = JSON.parse(JSON.stringify(row))
+            this.showDialog = true
+        },
+        handleClose(){
+            this.showDialog = false
+        },
+        //更新技术交底书会话记录
+        updateConfessionSession(){
+            var params = {
+                confessionSessionId:this.form.id,
+                inventionPoint:this.form.inventionPoint,
+                conversationName:this.form.conversationName
+            }
+            this.$api.updateConfessionSession(params).then(response=>{
+                if(response.code == 200){
+                    this.$emit('rename',this.form)
+                    this.handleClose()
+                }
+            }).catch(error=>{
+                this.$message.error('更新失败')
+            })
+        },
+    },
+  }
+</script>
+  
+<style lang="scss">
+  .responseDialog{
+    .el-dialog__body{
+      padding-bottom: 0px;
+    }
+  }
+</style>

src/views/noveltySearch/components/technicalDisclosure/index.vue → src/views/AITools/technicalDisclosure/index.vue


+ 3 - 1
src/views/noveltySearch/components/technicalDisclosure/technicalDisclosure.vue

@@ -302,7 +302,9 @@ export default {
     },
     //查询技术交底书会话记录
     queryConfessionSession(onlyQuery){
-      var params = {}
+      var params = {
+        type:0
+      }
       this.$api.queryConfessionSession(params).then(response=>{
         if(response.code == 200){
           this.confessionSessionList = response.data || []

+ 37 - 8
src/views/components/import/components/importPatent.vue

@@ -66,6 +66,12 @@
                                 <el-tag v-for="(item,index) in assoImportTaskFieldVOS" :key="item.fieldValueId">{{ item.fieldName }} = {{ item.fieldValueStr }} <span><i @click="del(index,item)" class="el-icon-error"></i></span></el-tag>
                             </div>
                         </el-form-item>
+                        <el-form-item v-if="importData.importToType != 2" label="标引操作规则:">
+                            <el-select v-model="indexingRules"  placeholder="请选择标引操作规则" >
+                                <el-option label="覆盖原标引结果" :value="2"></el-option>
+                                <el-option label="新增标引结果" :value="1"></el-option>
+                            </el-select>
+                        </el-form-item>
                         <el-form-item label="数据来源:" v-if="form.type == 1">
                             <select style="width:calc(100% - 100px);border:0;outline:none" name="" id="" v-model="form.sourceId">
                             <option value="">请选择数据来源</option>
@@ -75,7 +81,7 @@
                         </el-form-item>
                         <template v-if="['2','3'].indexOf(form.type) != -1">
                             <div>
-                                <el-form-item label="导入内容">
+                                <el-form-item label="导入内容">
                                     <el-select v-model="importContent"  multiple collapse-tags placeholder="请选择导入内容" >
                                         <el-option v-for="item in importContents"
                                             :key="item.value"
@@ -84,15 +90,25 @@
                                         </el-option>
                                     </el-select>
                                 </el-form-item>
-                                <el-form-item label="导入方式">
+                                <el-form-item label="导入方式">
                                     <el-radio-group v-model="form.type">
                                         <el-radio label="2">专利号</el-radio>
                                         <el-radio label="3">文件</el-radio>
                                     </el-radio-group>
                                 </el-form-item>
-                                <el-form-item label="专利号:" v-if="form.type == 2">
+                                <!-- <el-form-item label="专利号:" v-if="form.type == 2">
                                     <el-input type="textarea" v-model="form.searchCondition" placeholder="请输入专利号(多个专利号同时添加中间请用符号“,”隔开)"></el-input>
-                                </el-form-item> 
+                                </el-form-item>  -->
+                                <template v-if="form.type == 2">
+                                    <div>
+                                        <el-form-item label="公开公告号:">
+                                            <el-input type="textarea" v-model="patentNos.publicNo" placeholder="请输入公开公告号(多个号码同时添加中间请用符号“,”隔开)"></el-input>
+                                        </el-form-item> 
+                                        <el-form-item label="申请号:" >
+                                            <el-input type="textarea" v-model="patentNos.appNo" placeholder="请输入申请号(多个号码同时添加中间请用符号“,”隔开)"></el-input>
+                                        </el-form-item> 
+                                    </div>
+                                </template>
                             </div>
                         </template>
                         
@@ -121,7 +137,10 @@ export default {
     return {
       
       loading:false,
-      files:[]
+      files:[],
+      patentNos:{
+
+      }
     }
   },
   computed: {
@@ -176,10 +195,20 @@ export default {
         }else{
            
             if(this.form.type == 2){
-                if(!this.form.searchCondition){
-                    this.$message.error('请输入专利号')
+                // if(!this.form.searchCondition){
+                //     this.$message.error('请输入专利号')
+                //     return false
+                // }
+                if(!this.patentNos.publicNo && !this.patentNos.appNo){
+                    this.$message.error('请输入号码进行导入')
                     return false
                 }
+                this.form.searchCondition = JSON.stringify(
+                    {
+                        publicNo:this.patentNos.publicNo,
+                        appNo:this.patentNos.appNo
+                    }
+                )
             }else if(this.form.type == 3){
                 if (!this.form.fileGuid) {
                     this.$message.error('请上传文件')
@@ -212,7 +241,7 @@ export default {
                         fieldType:choose.fieldType,
                         fieldId:choose.fieldId,
                         fieldValue:[choose.fieldValueId],
-                        optionType:2
+                        optionType:this.indexingRules
                     }
                 )
             }else{

+ 2 - 1
src/views/components/import/mixins/index.js

@@ -34,7 +34,8 @@ export default{
                 label: 'name'
             },
             assoImportTaskFieldVOS:[],
-            importContent:['0','1','2','3']
+            importContent:['0','1','2','3'],
+            indexingRules:2,//标引操作规则
         }
     },
     computed:{

+ 15 - 2
src/views/components/import/task/components/index.vue

@@ -410,8 +410,21 @@ export default {
            
           });
       }else{
-       
-        content=row.searchCondition
+        content = ''
+        if(row.searchCondition){
+          try{
+            let data = JSON.parse(row.searchCondition)
+            if(data.publicNo){
+              content += `<p>公开公告号:${data.publicNo}`
+            }
+            if(data.appNo){
+              content += `<p>申请号:${data.appNo}`
+            }
+          }catch(e){
+            content = row.searchCondition
+          }
+        }
+        // content=row.searchCondition
         // if(row.type == 4){
         //   this.$confirm(content, title, {
         //     confirmButtonText: '保存到定期更新条件',

+ 29 - 0
src/views/layout/components/UserBar.vue

@@ -1,6 +1,19 @@
 <template>
   <div class="admin-user-bar">
     <div class="menu">
+      <!-- 小世AI -->
+      <span>
+        <el-dropdown @command="toAI($event)">
+          <el-link :underline="true" :type="belong=='AI'?'primary':'default'" class="el-dropdown-link">
+            <span class="AI">小世AI工具</span><i class="el-icon-arrow-down el-icon--right AI" style="font-size:20px"></i>
+            </el-link>
+          <el-dropdown-menu slot="dropdown">
+            <el-dropdown-item command="/technicalDisclosure">技术交底书解析</el-dropdown-item>
+            <el-dropdown-item command="claimsExplain">权利要求解释及有益效果</el-dropdown-item>
+          </el-dropdown-menu>
+        </el-dropdown>
+      </span>
+
       <span v-for="(item,index) in menu" :key="index">
         <el-dropdown @command="changePage($event,item)" v-if="item.children && item.children.length>0">
           <el-link :underline="true" :type="item.belong==belong?'primary':'default'" class="el-dropdown-link">
@@ -276,6 +289,13 @@ export default {
     close() {
       this.clientVisible = false
     },
+    //AI工具
+    toAI(path){
+      const router = this.$router.resolve({
+        path: path,
+      })
+      window.open(router.href,'_blank')
+    },
     //跳转页面
     changePage(path,item){
       var query = {}
@@ -431,9 +451,18 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
+.menu{
+  .AI{
+    font-size: 22px;
+    background: linear-gradient(to right, blue, red);
+    -webkit-background-clip: text;
+    color: transparent;
+  }
+}
 .menu>*{
   margin-right:20px;
 }
+
 </style>
 <style lang="scss">
 .menu{