patentDetails.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  1. <template>
  2. <div class="height_100">
  3. <el-container v-loading="loading">
  4. <el-header style="min-height: 100px !important;height: auto;">
  5. <div style="width:100%">
  6. <div style="display: flex;justify-content: space-between;align-items: center;height:50px">
  7. <div style="text-align: start;padding-left: 10px;position: relative;">
  8. <!-- <div style="width: 260px;"> -->
  9. <img src="@/assets/visual/fixed.png" width="20px" height="20px"
  10. v-if="fix === true && value == true && !lock" @click="fix = false" style="" />
  11. <img src="@/assets/visual/unfixed.png" width="20px" height="20px"
  12. v-if="fix === false && value == true && !lock" @click="fix = true" style="" />
  13. <!-- </div> -->
  14. </div>
  15. <div>
  16. <div>
  17. <span v-html="getViewDom(patent.patentNo)"></span>
  18. <el-tag type="primary" effect="dark" size="mini" class="margin-left_10" v-if="patent.simpleStatus">{{
  19. simpleStatus[patent.simpleStatus] }}</el-tag>
  20. </div>
  21. <div style="color: #6b6868; font-size: 15px;padding-bottom: 5px;">
  22. <span v-html="getView(patent, 'title')"></span>
  23. <el-link v-if="haveTranslatedText(patent, 'title')" type="primary" @click.native="handleChange(patent, 'title')"
  24. style="margin-left: 10px;margin-top: -3px;">
  25. <span v-if="!patent.change">切换译文</span>
  26. <span v-else>切换原文</span>
  27. </el-link>
  28. </div>
  29. </div>
  30. <!-- <PatentMark :patentNo="patent.patentNo" @biaozhu="getBiaoZhu"></PatentMark> -->
  31. <div v-if="outside">
  32. <el-button type="primary" size="small" @click="importToProject">导入专利</el-button>
  33. </div>
  34. <div style="display: flex;justify-content: space-between;margin-right: 10px;align-items: center;" v-else>
  35. <el-dropdown size="medium" style="margin-right:10px">
  36. <el-button type="primary" size="small">
  37. 创建报告<i class="el-icon-arrow-down el-icon--right"></i>
  38. </el-button>
  39. <el-dropdown-menu slot="dropdown" style="margin-top:0px">
  40. <!-- 遍历按钮 -->
  41. <el-dropdown-item @click.native="handleAnalyse(1)">第三方意见</el-dropdown-item>
  42. <el-dropdown-item @click.native="handleAnalyse(2)">稳定性分析</el-dropdown-item>
  43. <el-dropdown-item @click.native="handleAnalyse(4)">侵权分析</el-dropdown-item>
  44. <el-dropdown-item @click.native="handleAnalyse(5)">回避设计</el-dropdown-item>
  45. <el-dropdown-item @click.native="handleAnalyse(7)">官方无效</el-dropdown-item>
  46. </el-dropdown-menu>
  47. </el-dropdown>
  48. <el-button type="primary" size="small" @click="handleSelect('PatentExport')">导出文档</el-button>
  49. </div>
  50. </div>
  51. <div style=" position: relative; border-top: 1px solid #e6e6e6;text-align: center;" class="menu">
  52. <el-link v-for="item in menuList" :type="activeMenu === item.value ? 'primary' : undefined" :key="item.value"
  53. v-if="!item.show" @click.native="handleSelect(item.value)">
  54. {{ item.label }}
  55. <span v-if="item.value == 'PatentImage' || item.value == 'PatentPDF'" @click.stop="ending(item.value)">
  56. <el-popover placement="right" width="400" trigger="click">
  57. <el-radio v-for="(item, index) in positionList" :key="index" v-model="radio" @input="changePosition"
  58. :label="item.value">{{ item.label }}</el-radio>
  59. <i class="el-icon-setting" slot="reference"></i>
  60. </el-popover>
  61. </span>
  62. </el-link>
  63. <el-link v-for="item in menuList2" :type="activeMenu === item.value ? 'primary' : undefined" :key="item.value"
  64. v-if="!outside" @click.native="handleSelect(item.value)">{{ item.label }}</el-link>
  65. <template v-if="signPermission">
  66. <el-tooltip class="item" effect="dark" :content="(showRight ? '隐藏' : '显示') + '右侧菜单'" placement="top">
  67. <i :class="showRight ? 'el-icon-s-unfold' : 'el-icon-s-fold'"
  68. style="font-size: 25px;position: absolute; right: 10px; margin-top: 5px;color: #2f2f2f; cursor: pointer"
  69. @click="showRight = !showRight"></i>
  70. </el-tooltip>
  71. </template>
  72. </div>
  73. </div>
  74. </el-header>
  75. <el-main>
  76. <div class="height_100" style="display: flex;">
  77. <div class="height_100" :style="{ width: showRight ? 'calc(100% - 321px)' : 'calc(100% - 21px)' }">
  78. <my-view :position="this.positionList.find(item => item.value == radio).position"
  79. :showView="radio != 1 && activeMenu != activeMenu2">
  80. <div slot="left">
  81. <component :activeName="activeMenu" style="width:100%;padding-right: 10px;" :is="activeMenu"
  82. :evidence="evidence" :signPatentNo="signPatentNo" :reportType="reportType" :project-id="projectId"
  83. :outside="outside" :projectType="projectType" :patent="patent" :patentNo="patent.patentNo"
  84. :domId="$commonJS.uuid(36)" @refresh="getPatent()"></component>
  85. </div>
  86. <div slot="right">
  87. <component :is="activeMenu2" :project-id="projectId" :outside="outside" :projectType="projectType"
  88. :patent="patent" :signPatentNo="signPatentNo" :reportType="reportType" :sign="true" :patentNo="patent.patentNo"
  89. :evidence="evidence"></component>
  90. </div>
  91. </my-view>
  92. </div>
  93. <div class="height_100" v-if="showRight" style="width: 300px;margin: auto;">
  94. <el-container>
  95. <el-header>
  96. <div class="patent-articles-option">
  97. <el-tabs v-model="activeOption" type="card">
  98. <el-tab-pane label="标引" name="PatentField"></el-tab-pane>
  99. <!-- <el-tab-pane label="注释" name="PatentAnnotation"
  100. :disabled="!($permission('/workspace/details/notes') && $r(projectId, [1, 2]))"></el-tab-pane> -->
  101. </el-tabs>
  102. </div>
  103. </el-header>
  104. <el-main>
  105. <keep-alive>
  106. <component :is="activeOption" :project-id="projectId" :patentNo="patent.patentNo" :taskId="taskId">
  107. </component>
  108. </keep-alive>
  109. </el-main>
  110. </el-container>
  111. </div>
  112. </div>
  113. </el-main>
  114. </el-container>
  115. <!-- 创建报告 -->
  116. <addAndEditReport ref="addAndEditReport"></addAndEditReport>
  117. <projectListDialog ref="projectListDialog" :importData="condition"></projectListDialog>
  118. </div>
  119. </template>
  120. <script>
  121. import PatentBasic from './patentMessage/PatentBasic.vue'
  122. import PatentRight from './patentMessage/PatentRight.vue'
  123. import PatentImage from './patentMessage/PatentImage.vue'
  124. import PatentInstruction from './patentMessage/PatentInstruction.vue'
  125. import PatentFamily from './patentMessage/PatentFamily.vue'
  126. import PatentStatus from './patentMessage/PatentStatus.vue'
  127. import PatentPDF from './patentMessage/PatentPDF.vue'
  128. import pageProduct from './patentMessage/pageProduct.vue'
  129. import licenseHistory from './patentMessage/history/licenseHistory.vue'
  130. import litigationHistory from './patentMessage/history/litigationHistory.vue'
  131. import reviewHistory from './patentMessage/history/reviewHistory.vue'
  132. import otherReferences from './patentMessage/history/otherReferences.vue'
  133. import InvalidHistory from './patentMessage/history/InvalidHistory.vue'
  134. import HistoryOfInvalidEvidence from './patentMessage/history/HistoryOfInvalidEvidence.vue'
  135. import PatentWorth from './patentMessage/history/echarts/components/echarts.vue'
  136. import { projectData, handleData } from '../../patentCollection/components/mixins/index'
  137. import PatentField from './PatentField.vue'
  138. import addAndEditReport from '@/views/report/components/dialog/addAndEditReport.vue'
  139. import projectListDialog from "@/views/components/import/conditionImport/components/projectListDialog.vue";
  140. export default {
  141. components: {
  142. PatentBasic,
  143. PatentRight,
  144. PatentImage,
  145. PatentInstruction,
  146. PatentFamily,
  147. PatentStatus,
  148. PatentPDF,
  149. pageProduct,
  150. licenseHistory,
  151. litigationHistory,
  152. reviewHistory,
  153. otherReferences,
  154. InvalidHistory,
  155. HistoryOfInvalidEvidence,
  156. PatentWorth,
  157. PatentField,
  158. addAndEditReport,
  159. projectListDialog
  160. },
  161. mixins: [projectData, handleData],
  162. props: {
  163. projectId: {
  164. default: null
  165. },
  166. patentNo: {
  167. type: String
  168. },
  169. taskId: {
  170. default: null,
  171. },
  172. evidence: {
  173. },
  174. signPatentNo: {
  175. },
  176. reportType: {
  177. },
  178. outside: {
  179. default: false
  180. },
  181. projectType: {
  182. type: String,
  183. default: '2'//判断是不是从专题库进入专利详情1为专题库(专题库已传1)2为报告(报告未传2)3为产品(产品已传3)
  184. },
  185. value: {
  186. default: false
  187. },
  188. lock: {
  189. default: false
  190. }
  191. },
  192. data() {
  193. return {
  194. loading: false,
  195. radio: 1,
  196. signPermission:false,
  197. positionList: [
  198. {
  199. label: 'tab展示',
  200. value: 1,
  201. position: 'row'
  202. },
  203. {
  204. label: '上边展示',
  205. value: 2,
  206. position: 'column-reverse'
  207. },
  208. {
  209. label: '下边展示',
  210. value: 3,
  211. position: 'column'
  212. },
  213. {
  214. label: '左边展示',
  215. value: 4,
  216. position: 'row-reverse'
  217. },
  218. {
  219. label: '右边展示',
  220. value: 5,
  221. position: 'row'
  222. },
  223. ],
  224. menuList: [
  225. {
  226. value: 'PatentBasic',
  227. label: '基础信息'
  228. },
  229. {
  230. value: 'PatentRight',
  231. label: '权利要求'
  232. },
  233. {
  234. value: 'PatentImage',
  235. label: '附图'
  236. },
  237. {
  238. value: 'PatentInstruction',
  239. label: '说明书文本'
  240. },
  241. {
  242. value: 'PatentFamily',
  243. label: '同族专利'
  244. },
  245. {
  246. value: 'PatentStatus',
  247. label: '法律事务'
  248. },
  249. {
  250. value: 'PatentPDF',
  251. label: '说明书'
  252. },
  253. ],
  254. menuList2: [
  255. {
  256. value: 'licenseHistory',
  257. // show: this.$permission('/workspace/patent/worth') ? false : true,
  258. label: '许可历史'
  259. },
  260. {
  261. value: 'pageProduct',
  262. // show: this.$permission('/workspace/product') ? false : true,
  263. label: '商品化'
  264. },
  265. {
  266. value: 'PatentWorth',
  267. // show: this.$permission('/workspace/patent/worth') ? false : true,
  268. label: '价值曲线'
  269. },
  270. {
  271. value: 'reviewHistory',
  272. label: '审查历史'
  273. },
  274. {
  275. value: 'InvalidHistory',
  276. label: '被无效历史'
  277. },
  278. {
  279. value: 'HistoryOfInvalidEvidence',
  280. label: '作为无效证据使用历史'
  281. },
  282. // {
  283. // value: 'InvalidEvidencePush',
  284. // label: '无效证据推荐'
  285. // },
  286. {
  287. value: 'litigationHistory',
  288. label: '诉讼历史'
  289. },
  290. {
  291. value: 'otherReferences',
  292. label: '其他参考资料'
  293. },
  294. ],
  295. fix: false,
  296. showRight: false,
  297. activeOption: 'PatentField',
  298. activeMenu: 'PatentBasic',
  299. activeMenu2: '',
  300. patent: {},
  301. };
  302. },
  303. watch: {
  304. patentNo(val) {
  305. if (val && !this.fix) {
  306. this.getPatent()
  307. this.getPiZhuData(val)
  308. }
  309. }
  310. },
  311. computed: {
  312. condition() {
  313. return this.$s.getSession('import') || {}
  314. },
  315. },
  316. created() { },
  317. mounted() {
  318. this.getSignPermission()
  319. this.getPatent()
  320. this.getPiZhuData()
  321. },
  322. methods: {
  323. async getSignPermission(){
  324. if(!this.outside || this.reportType!=3 || (await this.$permission.projectPermission(this.projectId)) || this.taskId){
  325. this.signPermission = true
  326. }else{
  327. this.signPermission = false
  328. }
  329. },
  330. // 获取批注
  331. getPiZhuData(val) {
  332. let params = {
  333. patentNo: val ? val : this.patentNo,
  334. projectId: this.projectId,
  335. }
  336. this.$api.queryScratchWords(params).then(response => {
  337. if (response.code == 200) {
  338. if (this.highlight.piZhuContrastList.length > 0) {
  339. var a = this.highlight.piZhuContrastList.filter(item => {
  340. return item.patentNo != params.patentNo
  341. }).concat(response.data.data)
  342. } else {
  343. var a = response.data.data
  344. }
  345. this.$store.commit('SET_PATENT_PIZHU_CONTRAST', a)
  346. }
  347. })
  348. },
  349. // 获取外部摘要附图的guid,获取外部的法律状态
  350. getData() {
  351. var params = {
  352. appNo: this.patent.rowApplicationNo,
  353. }
  354. this.$api.getPictureGuid(params).then(response => {
  355. if (response.code == 200) {
  356. this.$set(this.patent, 'pictureGuid', response.data)
  357. }
  358. })
  359. this.$api.getLegalStatus(params).then(response => {
  360. if (response.code == 200) {
  361. this.$set(this.patent, 'legalEvents', response.data.legalEvents)
  362. }
  363. })
  364. },
  365. //导入到专题库
  366. importToProject() {
  367. var form = {
  368. ...this.condition,
  369. patentNos: [this.patent.patentNo],
  370. // isDeletePatentNos: [],
  371. }
  372. this.$refs.projectListDialog.open(form);
  373. },
  374. getBiaoZhu() {
  375. },
  376. //获取专利信息
  377. getPatent() {
  378. var params = {
  379. patentNo: this.patentNo
  380. }
  381. var api = 'selectPatentDetail'
  382. if (this.outside) {
  383. api = 'queryExternalDetail'
  384. }
  385. this.loading = true
  386. this.$api[api](params).then(response => {
  387. if (response.code == 200) {
  388. if(this.outside){
  389. response.data.claim = null
  390. }
  391. this.patent = response.data
  392. this.loading = false
  393. if (this.outside) {
  394. this.getData()
  395. }else{
  396. this.getPatentField()
  397. }
  398. }
  399. }).catch(error => {
  400. this.loading = false
  401. })
  402. },
  403. getPatentField(){
  404. var params = {
  405. projectId : this.projectId,
  406. patentNos:[this.patent.patentNo],
  407. innerFields:[
  408. {
  409. fieldType:10,
  410. fieldId:0
  411. }
  412. ]
  413. }
  414. this.$api.getPatentFields(params).then(response=>{
  415. if(response.code == 200){
  416. var data = response.data.data
  417. if(data && data.length>0){
  418. var inner = data[0].innerClassFields
  419. if(inner && inner.length>0){
  420. this.$set(this.patent,'label',inner[0].fieldValueVOS)
  421. }else{
  422. this.$set(this.patent,'label',[])
  423. }
  424. }else{
  425. this.$set(this.patent,'label',[])
  426. }
  427. }
  428. })
  429. },
  430. // 创建报告:无效分析等点击事件
  431. handleAnalyse(id) {
  432. var permission = {
  433. 1:'analysisAndOpinion',
  434. 2:'analysisAndOpinion',
  435. 4:'tort',
  436. 5:'avoidDesign',
  437. 7:'officiallyInvalid'
  438. }
  439. if(!this.$permission.FunPermissions('xiaoshi/report/'+permission[id])){
  440. this.$showPermissionDialog()
  441. return false
  442. }
  443. var form = {
  444. reportType: id,
  445. signPatentNo: this.patent.patentNo,
  446. projectId: this.projectId,
  447. // departmentId: response.data[0].departmentId,
  448. // personId: response.data[0].personnelId,
  449. // clientId: response.data[0].clientId,
  450. matterId: [],
  451. scenarioId: [],
  452. inventionName: this.getView(this.patent, 'title')
  453. }
  454. this.$refs.addAndEditReport.open(form)
  455. },
  456. handleSelect(index) {
  457. // 导出文档
  458. if (index === 'PatentExport') {
  459. let obj = {
  460. isAdd: [this.patentNo],
  461. isDelete: [],
  462. startNumber: 1,
  463. endNumber: 0,
  464. searchQuery: '',
  465. customFields: [],
  466. orderDTOList: [],
  467. }
  468. const router = this.$router.resolve({
  469. path: '/exportPatent',
  470. query: {
  471. projectId: this.projectId,
  472. condition: JSON.stringify(obj)
  473. }
  474. })
  475. window.open(router.href, '_blank');
  476. return false
  477. }
  478. if (index == this.activeMenu2) {
  479. this.activeMenu2 = ''
  480. this.radio = 1
  481. this.changePosition(this.radio)
  482. }
  483. this.activeMenu = index
  484. },
  485. ending(val) {
  486. this.activeMenu2 = val
  487. return false
  488. },
  489. changePosition(val) {
  490. this.radio = val
  491. }
  492. },
  493. };
  494. </script>
  495. <style lang="scss" scoped>
  496. .menu {
  497. .el-link {
  498. margin-right: 20px;
  499. }
  500. }
  501. </style>