zhuliu 7 months ago
parent
commit
d9be08ec4b

+ 11 - 0
src/utils/constants.js

@@ -252,4 +252,15 @@ updateCycle:[
     value:'year'
   },
 ],
+
+
+//法院判决书行诉结果
+litigationResult:{
+  1:"一审驳回原告诉请",
+  2:'一审撤销或部分撤销判决',
+  3:"一审撤销重作判决",
+  4:"二审驳回上诉请求",
+  5:"二审依法改判或撤销或变更",
+  6:"二审查清事实后改判",
+}
 }

+ 10 - 1
src/utils/permissions.js

@@ -47,7 +47,7 @@ export default {
    * 项目权限
    * @param {*} projectId 项目ID
    */
-  async projectPermission(projectId){
+  async projectPermission(projectId,roles){
     const user = Store.state.user.userinfo
     if(user.roleType == 1 || user.roleType == 2){
       return true
@@ -55,6 +55,7 @@ export default {
     if(!projectId){
       return true
     }
+    
     var data = {}
     // if(sessionStorage.getItem('projectPermission')){
     //   data = JSON.parse(sessionStorage.getItem('projectPermission'))
@@ -74,6 +75,14 @@ export default {
     if(!obj){
       return 0
     }
+    if(roles){
+      if(typeof roles == 'string'){
+        roles = [roles]
+      }
+      return roles.some(element1 => 
+        obj.includes(element1)
+      );
+    }
     // 0创建人 1负责人 3被分享人 2参与人
     if(obj.includes('0')||obj.includes('1')||obj.includes('2')){
       return true

+ 38 - 16
src/views/components/text.vue

@@ -52,7 +52,7 @@ export default {
             patentType:"洗碗机配套件、生产设备及治具、其他、模具、呼吸机",
             input:"一段专利摘要文本。",
             output:"根据你的知识储备只输出专利类别和对应的置信度,输出结果中不要有其它的内容",
-            example:"以json格式输出 ,例如:{\"类别名称\" :\"呼吸机\" ,\"置信度\" :0.95}",
+            example:"以json格式输出 ,例如:[{\"类别名称\" :\"呼吸机\" ,\"置信度\" :0.95}",
             message:"",
             answer:""
         },
@@ -80,7 +80,7 @@ export default {
     async getPatentMessage(){
         let params = {
             "current": 1,
-            "size": 1,
+            "size": 5,
             "groupField": "0",
             "selected": [],
             "isAdd": [],
@@ -146,7 +146,7 @@ export default {
             }
             return fieldValueVOS.map(item=>{
                 return item.value
-            }).join('/r/n')
+            }).join('')
         }
         this.$api.getPatentFields(params).then(response=>{
             if(response.code == 200){
@@ -1366,7 +1366,8 @@ export default {
                     "content": `你的定位\r\n智能助手名称 :${data.name}\r\n主要任务 :${data.task}\r\n你的能力\r\n文本分析 :${data.analyse}\r\n分类识别 :${data.classify}\r\n你的知识储备\r\n专利类别 :${arr.join(',')}\r\n使用说明\r\n输入 :${data.input}\r\n输出 :${data.output}\r\n输出格式 :${data.example}`},
                 {
                     "role": "user", 
-                    "content": this.patentList[i].abstractStr} 
+                    "content": this.patentList[i].abstractStr
+                } 
             ]
             // message = [
             //     {
@@ -1387,27 +1388,45 @@ export default {
                     'Content-Type': 'application/json',
                 },
                 body: JSON.stringify(params),
-            }).then(res=>{
-                this.loading = false
-                console.log(response)
-                if(response.code == 200){
-                    this.$set(this.form,'answer',response.data)
+            })
+            console.log(response)
+            this.loading = false
+            if (!response.ok) throw new Error('AI API 调用失败');
+            try{
+                const reader = response.body.getReader();
+                const decoder = new TextDecoder('utf-8');
+                while (true) {
+                    const { done, value } = await reader.read();
+                    if (done) break;
+                    const chunk = decoder.decode(value);
+                    const json = JSON.parse(chunk);
+                    const newContent = json.data;
+                    this.$set(this.form,'answer',newContent)
+                    this.patentList[i].output = newContent
+                    this.patentList[i].input = JSON.stringify(message)
                     let regex = /```(\w*)\n([\s\S]+?)```/g;
                     let match;
                     // console.log(regex.exec(text))
-                    while ((match = regex.exec(response.data)) !== null) {
-                        this.patentList[i].answer = match[2].trim()
+                    while ((match = regex.exec(newContent)) !== null) {
+                        // this.patentList[i].answer = match[2].trim()
+                        let text = match[2].trim()
+                        text = JSON.parse(text)
+                        console.log(text)
+                        this.patentList[i].answer = text.map(item=>{
+                            return item['类别名称']
+                        }).join('、')
                     }
+                    
                 }
-            }).catch(error=>{
-                this.loading = false
-            })
+            }catch{
+                console.log('错误')
+            }
+            
         }
         console.log(this.patentList)
-        return
         let exportData = []
         let head = [
-            '序号','专利号','标题','摘要','手动标引','自动标引'
+            '序号','专利号','标题','摘要','手动标引','自动标引',"AI输入","AI输出"
         ]
         exportData.push(head)
         for(let i = 0;i<this.patentList.length;i++){
@@ -1419,6 +1438,9 @@ export default {
             body.push(item.abstractStr)
             body.push(item.customFields)
             body.push(item.answer)
+            body.push(item.input)
+            body.push(item.output)
+            exportData.push(body)
         }
         this.$commonJS.exportToExcel(exportData,'AI分类测试')
     },

+ 32 - 6
src/views/report/InvalidResponse/components/dialog/editFlowPath.vue

@@ -47,16 +47,21 @@
                 <el-form-item label="决定要点">
                     <el-input v-model="form.decisionKey" autocomplete="off" placeholder="请输入决定要点"></el-input>
                 </el-form-item>
-                <el-form-item label="无效结果">
-                  <el-checkbox v-for="item in conclusion" :key="parseInt(item.value)" :label="parseInt(item.value)">{{
-                    item.label }}</el-checkbox>
+                <el-form-item label="无效结果" prop="cronIds">
+                  <el-checkbox-group v-model="form.cronIds">
+                      <el-checkbox v-for="item in conclusion" :key="parseInt(item.value)" :label="parseInt(item.value)">{{
+                      item.label }}</el-checkbox>
+                  </el-checkbox-group>
                 </el-form-item>
             </div>
           </template>
-          <template v-if="type.type ==16">
+          <template v-if="type.type ==16 || type.type ==26">
             <div>
-              <el-form-item label="行诉结果">
-                    <el-input v-model="form.conclusion" autocomplete="off" placeholder="请输入结论"></el-input>
+              <el-form-item label="行诉结果" prop="conclusion">
+                  <el-radio-group v-model="form.conclusion">
+                      <el-radio v-for="(value,key) in litigationResult[type.type]" :key="key" :label="key">{{
+                        value }}</el-radio>
+                  </el-radio-group>
                 </el-form-item>
             </div>
           </template>
@@ -143,6 +148,12 @@ const defaultSendEmail = ['6','1','7','8','16','3','17','27']
           name: [
             { required: true, message: '请输入案件子阶段名称', trigger: 'blur' }
           ],
+          cronIds:[
+            { required: true, message: '请选择无效结果', trigger: 'change' }
+          ],
+          conclusion:[
+            { required: true, message: '请选择行诉结果', trigger: 'change' }
+          ]
         },
         file: [],
         isFinish: false,
@@ -226,6 +237,10 @@ const defaultSendEmail = ['6','1','7','8','16','3','17','27']
         },
         sendEmailPerson:[],
         otherPerson:[],
+        litigationResult:{
+          16:{},
+          26:{}
+        }
       }
     },
     watch: {
@@ -235,6 +250,17 @@ const defaultSendEmail = ['6','1','7','8','16','3','17','27']
         return this.$store.state.dictMessage.dictMessage.REINVALID_ASSESS
       },
     },
+    created() {
+      let litigationResult = this.$constants.litigationResult
+      let r16 = ['1','2','3']
+      let r26 = ['1','2','3']
+      for(let i = 0;i<r16.length;i++){
+        this.litigationResult['16'][r16[i]] = litigationResult[r16[i]]
+      }
+      for(let i = 0;i<r26.length;i++){
+        this.litigationResult['16'][r26[i]] = litigationResult[r26[i]]
+      }
+    },
     mounted() {
   
     },

+ 23 - 13
src/views/report/InvalidResponse/components/flowPath/flowPath.vue

@@ -45,7 +45,7 @@
         <el-timeline-item v-for="item in timelineList" :timestamp="item.occurredTime" :key="item.id" placement="top">
           <el-card>
             <div>
-              <span>{{ timeType[item.flowType] }}:</span><span>{{ item.occurredTime}}</span>
+              <span>{{ timeType[item.flowType] || '发文日' }}:</span><span>{{ item.occurredTime}}</span>
               <div style="float: right;">
                   <span style="margin-right: 10px;"  @click="edit(item)"><el-link>编辑</el-link></span>
                   <span  @click="dele(item)"><el-link>删除</el-link></span>
@@ -64,10 +64,10 @@
               <p><span>决定书号码:</span><span>{{ item.invalidDecisionFileVO.fileNo }}</span></p>
               <p><span>法律依据:</span><span>{{ item.invalidDecisionFileVO.legalBase }}</span></p>
               <p><span>决定要点:</span><span>{{ item.invalidDecisionFileVO.decisionKey }}</span></p>
-              <p><span>无效结果:</span><span>{{ item.invalidDecisionFileVO.conclusion }}</span></p>
+              <p><span>无效结果:</span><span>{{ item.invalidDecisionFileVO.cronNames?item.invalidDecisionFileVO.cronNames.join('、'):'' }}</span></p>
             </div>
             <div v-if="item.flowType==16||item.flowType==26">
-              <p><span>行诉结果:</span><span>{{ item.judgementVO.conclusion }}</span></p>
+              <p><span>行诉结果:</span><span>{{ litigationResult[item.judgementVO.conclusion] }}</span></p>
             </div>
             <div v-if="item.flowType==17||item.flowType==27">
               <p><span>文档名称:</span><span>{{ item.otherDocumentsVO.documentName }}</span></p>
@@ -122,20 +122,21 @@ export default {
         '27':' 文档时间',
       },
       menuList:[],
-      currentMenuList:[]
+      currentMenuList:[],
+      litigationResult:this.$constants.litigationResult
     }
   },
   computed: {},
   watch: {},
-  created() {
-    this.getMenuList()
+  async created() {
+    await this.getMenuList()
   },
   mounted() {
     this.getList()
   },
   methods: {
-    getMenuList(){
-      this.$api.queryAssoCasePhaseList().then(response=>{
+    async getMenuList(){
+      await this.$api.queryAssoCasePhaseList().then(response=>{
         if(response.code == 200){
           var data = response.data.data
           this.currentMenuList = data
@@ -164,6 +165,19 @@ export default {
       this.queryParams.orderBy = 1
       this.$api.queryReportAffair(this.queryParams).then((res) => {
         if (res.code==200) {
+          let data = res.data.data
+          let arr = this.menuList.map(item=>{
+            return item.casePhase
+          })
+          for(let i = 0;i<arr.length;i++){
+            let item = arr[i]
+            let index = data.findIndex(l=>{
+              return l.casePhase == item
+            })
+            if(index!=-1){
+              data[index].showCasePhase = true
+            }
+          }
           this.timelineList = res.data.data
         }
       }).catch((error) => {
@@ -202,11 +216,7 @@ export default {
         27:'otherDocumentsVO',
       }
       var form = {
-        id:item.id,
-        projectId:item.projectId,
-        affairType:item.affairType,
-        description:item.description,
-        systemFileList:item.systemFileList,
+        ...item,
         ...item[field[item.flowType]]
       }
       let type = {

+ 5 - 1
src/views/report/components/index.vue

@@ -588,7 +588,11 @@ export default {
     },
     //操作列
     async handleOption({ option, row, isLast }) {
-      if(!(await this.$permission.projectPermission(row.id))){
+      let roles = null
+      if(option == 7){
+        roles = ['0','1']
+      }
+      if(!(await this.$permission.projectPermission(row.id,roles))){
         this.$showPermissionDialog()
         return false
       }