translate.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. export const translate = {
  2. data() {
  3. return {
  4. tabs:[
  5. {
  6. label:'原文',
  7. name:'0',
  8. field:'content'
  9. },
  10. {
  11. label:'译文',
  12. name:'1',
  13. field:'contentOut'
  14. },
  15. {
  16. label:'双语',
  17. name:'2',
  18. field:'content'
  19. },
  20. ],
  21. tabItem:{
  22. label:'原文',
  23. name:'0',
  24. field:'content'
  25. },
  26. getDataSign:true
  27. }
  28. },
  29. mounted() {
  30. this.showTabs()
  31. },
  32. methods: {
  33. showTabs(){
  34. if(this.outside || this.patent.appCountry == 'CN' || (this.patent.appNo && this.patent.appNo.substring(0,2)== 'CN')){
  35. this.tabs = [
  36. {
  37. label:'原文',
  38. name:'0',
  39. field:'content',
  40. icon:'el-icon-refresh',
  41. value:'3'
  42. },
  43. ]
  44. this.$set(this,'name','0')
  45. this.tabItem={
  46. label:'原文',
  47. name:'0',
  48. field:'content'
  49. }
  50. }
  51. else{
  52. this.tabs = [
  53. {
  54. label:'原文',
  55. name:'0',
  56. field:'content',
  57. icon:'el-icon-refresh',
  58. value:'3'
  59. },
  60. {
  61. label:'译文',
  62. name:'1',
  63. field:'contentOut'
  64. },
  65. {
  66. label:'双语',
  67. name:'2',
  68. field:'content'
  69. },
  70. ]
  71. }
  72. },
  73. to(scrollTop,ref='yiwen',activeIndex){
  74. var dom2 = this.$refs[ref]
  75. dom2.scrollTo(
  76. {
  77. behavior: "smooth",
  78. top:scrollTop
  79. }
  80. )
  81. //方案三
  82. // dom2.children[activeIndex].scrollIntoView(
  83. // {
  84. // behavior: "smooth",
  85. // block:'center'
  86. // // block:'nearest'
  87. // }
  88. // )
  89. if(activeIndex || activeIndex == 0){
  90. this.heightLight(activeIndex)
  91. }
  92. },
  93. heightLight(activeIndex){
  94. var dom2 = this.$refs.yiwen
  95. var dom1 = this.$refs.yuanwen
  96. for (let i = 0; i < dom1.children.length; i++) {
  97. if (i == activeIndex) {
  98. dom1.children[i].classList.add('highlightText');
  99. dom2.children[i].classList.add('highlightText');
  100. } else {
  101. // 清除之前的高亮
  102. dom1.children[i].classList.remove('highlightText');
  103. dom2.children[i].classList.remove('highlightText');
  104. }
  105. }
  106. },
  107. clickDom(e,ref){
  108. var index = e.target.dataset.index
  109. // var ref1 = 'yiwen'
  110. // if(ref=='yiwen'){
  111. // ref1 = 'yuanwen'
  112. // }
  113. // var scrollTop = this.$refs[ref].scrollTop
  114. // this.to(scrollTop,ref1,index)
  115. this.heightLight(index)
  116. },
  117. handleClick(tab, event) {
  118. this.tabItem = this.tabs.find(item=>{
  119. return item.name == this.name
  120. })
  121. if(this.name == 2 ){
  122. if((this.patentField == 3 && !this.checkedRightTree) || this.patentField == 4){
  123. this.$nextTick(()=>{
  124. var dom1 = this.$refs.yuanwen
  125. var dom2 = this.$refs.yiwen
  126. dom1.addEventListener('click',(e)=>this.clickDom(e,'yuanwen'))
  127. dom2.addEventListener('click',(e)=>this.clickDom(e,'yiwen'))
  128. })
  129. }
  130. }else{
  131. var dom1 = this.$refs.yuanwen
  132. var dom2 = this.$refs.yiwen
  133. if(dom2){
  134. dom2.removeEventListener('click',(e)=>this.clickDom(e,'yiwen'))
  135. }
  136. if(dom1){
  137. dom1.removeEventListener('click',(e)=>this.clickDom(e,'yuanwen'))
  138. }
  139. }
  140. },
  141. //获取内容
  142. getContentOrContentOut(data,field,type){
  143. if(data){
  144. if(data[field]){
  145. return this.getViewDom(data[field],type)
  146. }else{
  147. if(field == 'content'){
  148. var {text,sign} = this.dataToDom(data.data,field)
  149. if(sign){
  150. this.$set(data,'content',text)
  151. return this.getViewDom(text,type)
  152. }
  153. return text
  154. }
  155. if(field == 'contentOut'){
  156. var contentData = data.data
  157. if(contentData && contentData.length>0){
  158. // var obj = contentData[0]
  159. // if(obj.language && obj.language == 'CN'){
  160. // return this.getContentOrContentOut(data,'content')
  161. // }
  162. var {text,sign} = this.dataToDom(data.data,field)
  163. if(sign){
  164. this.$set(data,'contentOut',text)
  165. return this.getViewDom(text,type)
  166. }
  167. return text
  168. }
  169. }
  170. }
  171. }
  172. },
  173. //装载DOM
  174. dataToDom(data,field){
  175. var fieldKey = {
  176. content:'originalContent',
  177. contentOut:'translationContent'
  178. }
  179. field = fieldKey[field]
  180. var content = ''
  181. var sign = true
  182. var noTranslateData = []
  183. data.forEach((item,index)=>{
  184. content += `<div id="${field}${item.order}" data-index=${index}>`
  185. if(item[field]){
  186. content += item[field]
  187. }else{
  188. content += '加载中...'
  189. noTranslateData.push(
  190. {
  191. order:item.order,
  192. index:index
  193. }
  194. )
  195. }
  196. content += '</div>'
  197. })
  198. if(noTranslateData.length>0){
  199. sign = false
  200. if(this.getDataSign){
  201. this.getDataSign = false
  202. noTranslateData.forEach(item=>{
  203. this.getTranslateOrder(item.order,item.index,data)
  204. })
  205. }
  206. }
  207. return {text:content,sign:sign}
  208. },
  209. //获取译文
  210. getTranslateOrder(order,index,data){
  211. var params = {
  212. patentNo:this.patent.patentNo,
  213. patentField:this.patentField,
  214. order:order
  215. }
  216. this.$api.getTranslateOrder(params).then(res=>{
  217. if(res.code == 200){
  218. var translate = res.data
  219. var obj = {
  220. translationContent:'无译文'
  221. }
  222. if(translate.length>0){
  223. var obj = translate[0]
  224. }
  225. this.$set(data[index],'translationContent',obj.translationContent)
  226. }
  227. })
  228. },
  229. },
  230. }