update 文档对比

This commit is contained in:
赵霄
2023-09-21 10:34:28 +08:00
parent 7dba789262
commit d16cd056a6
@@ -36,19 +36,36 @@
<div class="can-scroll-content">
<div class="detail-content">
<div class="detail-content-left">
<div class="detail-content-left-header"
:title="resultData.serialNumberLeft + resultData.fileNameLeft">
{{ this.resultData.serialNumberLeft }}&nbsp;
{{ this.resultData.fileNameLeft }}
</div>
<div class="detail-content-content-left">
<a-tree
class="draggable-tree"
@select="onSelectLeft"
:tree-data="resultData.menuLeft"
/>
<div class="standard-catalogue part-common" :class="{'hide-catalogue': !leftCatalogueShow}">
<div class="catalogue-show" @click="changeLeftCatalogueShow">
<a-icon :type="leftCatalogueShow ? 'left' : 'right'" />
</div>
<div class="part-title" v-show="leftCatalogueShow">{{ $t('standardRegulationLibrary.standardCatalogue') }}</div>
<div class="has-title-part-content" v-show="leftCatalogueShow">
<a-tree
class="draggable-tree"
:selected-keys="leftTreeSelectedKeys"
:replace-fields="{key: 'menuId'}"
@select="onSelectLeft"
:tree-data="resultData.menuLeft">
<a-icon slot="switcherIcon" type="down" :style="{ fontSize: '12px', color: '#103770' }" />
<template slot="title" slot-scope="{title}">
<!-- 目录前三个和有子集的标题加粗 -->
<span :style="title.indexOf('.')===-1?'font-weight: 600;':''">{{ title }}</span>
</template>
</a-tree>
</div>
</div>
<div class="detail-content-content-right-top">
<!--标准名称-->
<div class="standard-name">
<a-tooltip placement="topLeft">
<template #title>
{{ resultData.serialNumberLeft }} {{ resultData.fileNameLeft }}
</template>
<span>{{ resultData.serialNumberLeft }} {{ resultData.fileNameLeft }}</span>
</a-tooltip>
</div>
<div class="detail-content-content-right">
<div class="detail-content-content-right-data" @click="detailLeft(index,item)"
v-for="(item,index) in resultData.textLeft" :key="index"
@@ -62,25 +79,36 @@
</div>
</div>
<div class="detail-content-right">
<div class="detail-content-left-header">
<span class="detail-content-left-header-text"
:title="resultData.serialNumberRight + resultData.fileNameRight">
{{ this.resultData.serialNumberRight }}&nbsp;
{{ this.resultData.fileNameRight }}
</span>
<!-- <span class="detail-content-left-header-text-right">-->
<!-- <span style="color: #9B9DA9">相似度:</span>-->
<!-- <span style="color: #E83030">98%</span>-->
<!-- </span>-->
</div>
<div class="detail-content-content-left">
<a-tree
class="draggable-tree"
@select="onSelectRight"
:tree-data="resultData.menuRight"
/>
<div class="standard-catalogue part-common" :class="{'hide-catalogue': !rightCatalogueShow}">
<div class="catalogue-show" @click="changeRightCatalogueShow">
<a-icon :type="rightCatalogueShow ? 'left' : 'right'" />
</div>
<div class="part-title" v-show="rightCatalogueShow">{{ $t('standardRegulationLibrary.standardCatalogue') }}</div>
<div class="has-title-part-content" v-show="rightCatalogueShow">
<a-tree
class="draggable-tree"
:selected-keys="rightTreeSelectedKeys"
:replace-fields="{key: 'menuId'}"
@select="onSelectRight"
:tree-data="resultData.menuRight">
<a-icon slot="switcherIcon" type="down" :style="{ fontSize: '12px', color: '#103770' }" />
<template slot="title" slot-scope="{title}">
<!-- 目录前三个和有子集的标题加粗 -->
<span :style="title.indexOf('.')===-1?'font-weight: 600;':''">{{ title }}</span>
</template>
</a-tree>
</div>
</div>
<div class="detail-content-content-right-right-top">
<!--标准名称-->
<div class="standard-name">
<a-tooltip placement="topLeft">
<template #title>
{{ resultData.serialNumberRight }} {{ resultData.fileNameRight }}
</template>
<span>{{ resultData.serialNumberRight }} {{ resultData.fileNameRight }}</span>
</a-tooltip>
</div>
<div class="detail-content-content-right-right">
<div class="detail-content-content-right-data-right" @click="detailRight(index,item)"
v-for="(item,index) in resultData.textRight" :key="index"
@@ -149,7 +177,11 @@ export default {
isMatching: true, // 自动匹配是否开启
dataLeft: {},
dataRight: {},
pageFrom: null
pageFrom: null,
leftCatalogueShow: true, // 左侧的标准目录是否展示
rightCatalogueShow: true, // 右侧的标准目录是否展示
leftTreeSelectedKeys: [], // 左侧被选中树节点
rightTreeSelectedKeys: [] // 右侧被选中树节点
}
},
mounted () {
@@ -298,6 +330,7 @@ export default {
},
// 点击左侧文档内容
detailLeft (num, item) {
this.leftTreeSelectedKeys = [item.menuId]
const detailLeftColor = document.getElementsByClassName('detail-content-content-right-data-color')
if (detailLeftColor && detailLeftColor.length > 0) {
detailLeftColor[0].classList.remove('detail-content-content-right-data-color')
@@ -332,6 +365,7 @@ export default {
},
// 点击右侧文档内容
detailRight (num, item) {
this.rightTreeSelectedKeys = [item.menuId]
const detailRightColor = document.getElementsByClassName('detail-content-content-right-data-color-right')
if (detailRightColor && detailRightColor.length > 0) {
detailRightColor[0].classList.remove('detail-content-content-right-data-color-right')
@@ -385,38 +419,134 @@ export default {
onSelectLeft (selectedKeys, exports) {
const node = exports.node.$vnode.data.props.dataRef
const detailLeft = document.getElementsByClassName('detail-content-content-right-data')
const detailContent = document.getElementsByClassName('detail-content-content-right-top')
if (!node.parentId) {
detailContent[0].scrollTop = 0
const detailLeftContent = document.getElementsByClassName('detail-content-content-right')[0]
let dataItem, num
for (let i = 0; i < this.resultData.textLeft.length; i++) {
if (node.menuId === this.resultData.textLeft[i].menuId) {
dataItem = this.resultData.textLeft[i]
num = i
detailLeftContent.scrollTop = detailLeft[i].offsetTop - 150
break
}
}
// 处理数据框选
const detailLeftColor = document.getElementsByClassName('detail-content-content-right-data-color')
if (detailLeftColor && detailLeftColor.length > 0) {
detailLeftColor[0].classList.remove('detail-content-content-right-data-color')
}
if (dataItem.id === this.dataLeft.id && !this.isMatching) {
this.dataLeft = {}
return
}
for (let i = 0; i < this.resultData.textLeft.length; i++) {
if (node.parentId && node.menuId === this.resultData.textLeft[i].menuId) {
detailContent[0].scrollTop = detailLeft[i].offsetTop - 150
if (detailLeft && detailLeft.length > 0) {
detailLeft[num].classList.add('detail-content-content-right-data-color')
}
this.dataLeft = dataItem
this.dataLeft.numIndex = num
// 处理选中右侧树
if (this.isMatching) {
const detailRight = document.getElementsByClassName('detail-content-content-right-data-right')
const detailRightContent = document.getElementsByClassName('detail-content-content-right-right')[0]
let rightDataItem, rightNum
for (let i = 0; i < this.resultData.textRight.length; i++) {
if (node.menuId === this.resultData.textRight[i].menuId) {
rightDataItem = this.resultData.textLeft[i]
rightNum = i
detailRightContent.scrollTop = detailRight[i].offsetTop - 150
break
}
}
// 处理选中右侧数据
if (!rightDataItem) {
return
}
const detailRightColor = document.getElementsByClassName('detail-content-content-right-data-color-right')
if (detailRightColor && detailRightColor.length > 0) {
detailRightColor[0].classList.remove('detail-content-content-right-data-color-right')
}
if (rightDataItem.id === this.dataRight.id && !this.isMatching) {
this.dataRight = {}
return
}
if (detailRight && detailRight.length > 0) {
detailRight[rightNum].classList.add('detail-content-content-right-data-color-right')
}
this.dataRight = rightDataItem
this.dataRight.numIndex = rightNum
}
},
// 右侧树选中
onSelectRight (selectedKeys, exports) {
const node = exports.node.$vnode.data.props.dataRef
const detailRight = document.getElementsByClassName('detail-content-content-right-data-right')
const detailContent = document.getElementsByClassName('detail-content-content-right-right-top')
if (!node.parentId) {
detailContent[0].scrollTop = 0
const detailRightContent = document.getElementsByClassName('detail-content-content-right-right')[0]
let rightDataItem, rightNum
for (let i = 0; i < this.resultData.textRight.length; i++) {
if (node.menuId === this.resultData.textRight[i].menuId) {
rightDataItem = this.resultData.textLeft[i]
rightNum = i
detailRightContent.scrollTop = detailRight[i].offsetTop - 150
break
}
}
// 处理选中右侧数据
if (!rightDataItem) {
return
}
for (let i = 0; i < this.resultData.textRight.length; i++) {
if (node.parentId && node.menuId === this.resultData.textRight[i].menuId) {
detailContent[0].scrollTop = detailRight[i].offsetTop - 150
const detailRightColor = document.getElementsByClassName('detail-content-content-right-data-color-right')
if (detailRightColor && detailRightColor.length > 0) {
detailRightColor[0].classList.remove('detail-content-content-right-data-color-right')
}
if (rightDataItem.id === this.dataRight.id && !this.isMatching) {
this.dataRight = {}
return
}
if (detailRight && detailRight.length > 0) {
detailRight[rightNum].classList.add('detail-content-content-right-data-color-right')
}
this.dataRight = rightDataItem
this.dataRight.numIndex = rightNum
if (this.isMatching) {
const detailLeft = document.getElementsByClassName('detail-content-content-right-data')
const detailLeftContent = document.getElementsByClassName('detail-content-content-right')[0]
let dataItem, num
for (let i = 0; i < this.resultData.textLeft.length; i++) {
if (node.menuId === this.resultData.textLeft[i].menuId) {
dataItem = this.resultData.textLeft[i]
num = i
detailLeftContent.scrollTop = detailLeft[i].offsetTop - 150
break
}
}
// 处理数据框选
if (!dataItem) {
return
}
const detailLeftColor = document.getElementsByClassName('detail-content-content-right-data-color')
if (detailLeftColor && detailLeftColor.length > 0) {
detailLeftColor[0].classList.remove('detail-content-content-right-data-color')
}
if (dataItem.id === this.dataLeft.id && !this.isMatching) {
this.dataLeft = {}
return
}
if (detailLeft && detailLeft.length > 0) {
detailLeft[num].classList.add('detail-content-content-right-data-color')
}
this.dataLeft = dataItem
this.dataLeft.numIndex = num
}
},
handleBack () {
this.$router.push({
path: '/documentTool/documentComparison'
})
},
changeLeftCatalogueShow () {
this.leftCatalogueShow = !this.leftCatalogueShow
},
changeRightCatalogueShow () {
this.rightCatalogueShow = !this.rightCatalogueShow
}
}
}
@@ -469,6 +599,7 @@ export default {
.detail-content {
height: calc(100% - 131px);
background-color: #eff1f4;
}
.detail-content-left {
@@ -476,18 +607,18 @@ export default {
float: left;
height: 100%;
border-right: 2px #EFF1F3 solid;
padding: 24px 32px;
box-sizing: border-box;
border-bottom: 2px #EFF1F3 solid;
display: flex;
}
.detail-content-right {
width: 50%;
height: 100%;
float: left;
padding: 24px 32px;
box-sizing: border-box;
border-bottom: 2px #EFF1F3 solid;
display: flex;
}
.detail-content-left-header {
@@ -558,46 +689,58 @@ export default {
}
.detail-content-content-right-top {
height: calc(100% - 48px);
height: 100%;
overflow-y: auto;
transition: all 1s;
scroll-behavior: smooth;
}
.detail-content-content-right-right-top {
height: calc(100% - 48px);
height: 100%;
overflow-y: auto;
transition: all 1s;
scroll-behavior: smooth;
.standard-name {
margin-right: 0;
}
.detail-content-content-right-right {
margin-right: 0;
width: calc(100% - 10px);
}
}
.detail-content-content-right {
width: 100%;
height: calc(100% - 25px - 40px);
width: calc(100% - 20px);
display: inline-block;
margin: 0 10px 0 10px;
overflow: auto;
}
.detail-content-content-right-right {
width: 100%;
height: calc(100% - 25px - 40px);
width: calc(100% - 20px);
display: inline-block;
margin: 0 10px 0 10px;
overflow: auto;
}
.detail-content-content-right-data {
padding: 22px 24px;
padding: 16px 20px;
box-sizing: border-box;
border: 1px solid #EFF1F3;
border-radius: 4px;
margin-bottom: 22px;
cursor: pointer;
background-color: white;
}
.detail-content-content-right-data-right {
padding: 22px 24px;
padding: 16px 20px;
box-sizing: border-box;
border: 1px solid #EFF1F3;
border-radius: 4px;
margin-bottom: 22px;
cursor: pointer;
background-color: white;
}
.detail-content-content-right-data:last-child {
@@ -663,11 +806,11 @@ export default {
}
.detail-content-content-right-data-color {
border: 1px red solid;
border: 2px red solid;
}
.detail-content-content-right-data-color-right {
border: 1px red solid;
border: 2px red solid;
}
::v-deep .delClass {
@@ -679,4 +822,97 @@ export default {
background: rgba(85, 183, 255, .6);
font-weight: 700;
}
/deep/ .ant-tree li span.ant-tree-switcher {
float: right;
}
::-webkit-scrollbar {
width: 3px;
}
.part-common {
border-radius: 8px;
background: #FFFFFF;
}
.standard-catalogue {
height: calc(100% - 20px);
width: 15%;
min-width: 200px;
margin: 10px 10px 10px 0;
position: relative;
/deep/ .ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected {
background-color: transparent !important;
color: @primary-color;
}
.catalogue-show {
position: absolute;
width: 12px;
height: 24px;
left: 100%;
top: 50%;
transform: translateY(-50%);
background-color: @primary-color;
border-radius: 0 12px 12px 0;
cursor: pointer;
color: white;
.anticon {
left: -2px;
position: absolute;
top: 50%;
transform: translateY(-50%);
}
}
}
.hide-catalogue {
width: 0;
min-width: 0;
}
.part-title {
height: 40px;
background: rgba(213, 44, 38, 0.12);
border-radius: 8px 8px 0 0;
line-height: 40px;
padding: 0 24px;
font-size: 16px;
font-family: PingFang SC-Semibold, PingFang SC, sans-serif;
font-weight: 600;
color: #1D2129;
}
.has-title-part-content {
height: calc(100% - 40px);
overflow: auto;
padding: 0 20px;
}
.standard-name {
margin: 10px 10px 5px 10px;
height: 40px;
background: #FFFFFF;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
}
.standard-name > span {
font-size: 16px;
font-family: PingFang SC-Semibold, PingFang SC, sans-serif;
font-weight: 600;
color: #1D2129;
flex: 1;
width: 0;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
cursor: pointer;
}
</style>