update 文档比对

This commit is contained in:
赵霄
2023-09-19 17:13:35 +08:00
parent 650e458f71
commit 2479b33556
9 changed files with 381 additions and 314 deletions
+21 -2
View File
@@ -9,7 +9,18 @@ const getDocSplitTableHeader = (params) => getAction('', params)
// 文档拆分详情-查询条件 // 文档拆分详情-查询条件
const getDocSplitSearch = (params) => getAction('', params) const getDocSplitSearch = (params) => getAction('', params)
// 文档比对 // 文档对比-发布/撤回
const withdrawPublication = (params) => postAction('/compare/sarFileCompareInfo/changeState', params)
// 文档对比-发起对比-获取页面数据
const getInitComparsionPageData = (params) => getAction('/split/sarFileSplitInfo/page', params)
// 文档对比-发起对比-提交数据
const submitInitComparsion = (params) => postAction('/compare/sarFileCompareInfo/fullTextComparison', params)
// 文档对比-文档对比-一致/保存
const docComparsionConsistentAndSave = (params) => postAction('/compare/sarFileCompareItemComment/add', params)
// 文档对比-文档对比-获取对比详情
const getComparisonDetail = (params) => postAction('/compare/sarFileCompareInfo/getComparisonDetail', params)
// 文档对比-文档对比-自动匹配
const clauseComparison = (params) => getAction('/compare/sarFileCompareItem/clauseComparison', params)
export { export {
// 文档拆分 // 文档拆分
@@ -17,5 +28,13 @@ export {
// 文档拆分-详情 // 文档拆分-详情
getDocSplitTableHeader, getDocSplitTableHeader,
getDocSplitSearch getDocSplitSearch,
// 文档比对
withdrawPublication,
getInitComparsionPageData,
submitInitComparsion,
docComparsionConsistentAndSave,
getComparisonDetail,
clauseComparison
} }
+6
View File
@@ -403,6 +403,12 @@ module.exports = {
numberColumns: 'Number of columns' numberColumns: 'Number of columns'
}, },
comparison: { comparison: {
oldDocumentTextNumber: 'Old document text number',
oldDocumentTextName: 'Old document text name',
oldTextState: 'Old text state',
newDocumentTextNumber: 'New document text number',
newDocumentTextName: 'New document text name',
newTextState: 'New text state',
releaseSituation: 'Release situation', releaseSituation: 'Release situation',
comparisonResults: 'Comparison results', comparisonResults: 'Comparison results',
initiateComparison: 'Initiate Comparison', initiateComparison: 'Initiate Comparison',
+7
View File
@@ -402,7 +402,14 @@ module.exports = {
numberRows: '行数', numberRows: '行数',
numberColumns: '列数' numberColumns: '列数'
}, },
// 文档比对
comparison: { comparison: {
oldDocumentTextNumber: '旧文档文本号',
oldDocumentTextName: '旧文档文本名称',
oldTextState: '旧文本状态',
newDocumentTextNumber: '新文档文本号',
newDocumentTextName: '新文档文本名称',
newTextState: '新文本状态',
releaseSituation: '发布情况', releaseSituation: '发布情况',
comparisonResults: '对比结果', comparisonResults: '对比结果',
initiateComparison: '发起对比', initiateComparison: '发起对比',
+1 -1
View File
@@ -326,7 +326,7 @@ export const constantRouterMap = [
{ {
path: '/comparisonResults', path: '/comparisonResults',
name: 'comparisonResults', name: 'comparisonResults',
component: () => import(/* webpackChunkName: "user" */ '@/views/documentTool/modules/ComparisonResults') component: () => import(/* webpackChunkName: "user" */ '../views/documentTool/documentComparison/ComparisonResults.vue')
}, },
// { // {
// path: '/', // path: '/',
@@ -1,167 +1,148 @@
<template> <template>
<a-spin :spinning="loading"> <internal-detail-page :loading="loading" :title="$t('docTool.comparison.comparisonResults')" :content-padding="0">
<div class="doc-detail-wrap"> <template #titleRightCustom>
<div class="doc-detail-header"> <!--查看差异项-->
<div class="doc-detail-title"> <a-button type="primary" ghost class="header-btn" icon="eye" @click="viewVarianceAssessmentClick">
<span style="line-height: 66px;display: inline-block;float: left" @click="goBack"> {{ $t('docTool.comparison.viewVarianceAssessment') }}
<a-icon type="arrow-left" style="margin-right: 6px;"/> </a-button>
</span> <!--查看一致项-->
<span> {{$t('docTool.comparison.comparisonResults')}}</span> <a-button type="primary" ghost class="header-btn" icon="eye" @click="viewConsistentAssessmentClick">
</div> {{ $t('docTool.comparison.viewConsistentAssessment') }}
<div class="doc-detail-right"> </a-button>
<div @click="viewVarianceAssessmentClick" <!--查看全部-->
class="operator-text-text" <a-button type="primary" ghost class="header-btn" icon="eye" @click="viewAllClick">
:class="{'operator-text-text-text': isVarianceOne}" {{ $t('docTool.comparison.viewAll') }}
:title="$t('docTool.comparison.viewVarianceAssessment')"> </a-button>
<a-icon type="eye"/> <!--导出对比报告-->
{{$t('docTool.comparison.viewVarianceAssessment')}} <a-button type="primary" ghost class="header-btn" icon="export" @click="exportComparisonReportClick">
{{ $t('docTool.comparison.exportComparisonReport') }}
</a-button>
<!--评论-->
<a-button type="primary" ghost class="header-btn" icon="message" @click="commentClick">
{{ $t('docTool.comparison.comment') }}
</a-button>
</template>
<div class="detail-content">
<div class="detail-content-header">
<a-checkbox @change="onChange" :indeterminate="indeterminate" :checked="checkAll" style="margin-left: 20px;float: left"></a-checkbox>
<div class="detail-content-header-content">
<div class="detail-content-header-content-left"
:title="resultData.serialNumberLeft + resultData.fileNameLeft"
:class="{'detail-content-header-content-left-active': isDisplay}">
{{ $t('docTool.comparison.selectedStandard') }}:{{ resultData.serialNumberLeft }}
<span style="cursor: pointer"
@click="fileClick(resultData.fileNameLeft,resultData.fileIdLeft)">{{ resultData.fileNameLeft }}</span>
</div> </div>
<div @click="viewConsistentAssessmentClick" class="operator-text-text" <div class="detail-content-header-content-content"
:class="{'operator-text-text-text': isVarianceTwo}" :title="resultData.serialNumberRight + resultData.fileNameRight"
:title="$t('docTool.comparison.viewConsistentAssessment')"> :class="{'detail-content-header-content-left-active':isDisplay}">
<a-icon type="eye"/> {{ $t('docTool.comparison.selectedStandard') }}:{{ resultData.serialNumberRight }}
{{$t('docTool.comparison.viewConsistentAssessment')}} <span style="cursor: pointer"
@click="fileClick(resultData.fileNameRight,resultData.fileIdRight)">{{ resultData.fileNameRight }}</span>
</div> </div>
<div @click="viewAllClick" class="operator-text-text" <div class="detail-content-header-content-rightOne"
:class="{'operator-text-text-text': isVarianceThe}" :class="{'detail-content-header-content-rightOne-active':isDisplay}"
:title="$t('docTool.comparison.viewAll')"> :title="$t('docTool.comparison.comparisonDifferenceComment')">
<a-icon type="eye"/> {{ $t('docTool.comparison.comparisonDifferenceComment') }}
{{$t('docTool.comparison.viewAll')}}
</div> </div>
<div @click="exportComparisonReportClick" class="operator-text-text" <div class="detail-content-header-content-right" v-if="!isDisplay">
:title="$t('docTool.comparison.exportComparisonReport')"> {{ $t('operation') }}
<a-icon type="export" :rotate="-90"/>
{{$t('docTool.comparison.exportComparisonReport')}}
</div>
<div @click="commentClick" class="operator-text-text"
:title="$t('docTool.comparison.comment')">
<a-icon type="message"/>
{{$t('docTool.comparison.comment')}}
</div> </div>
</div> </div>
</div> </div>
<div style=""> <div class="scroll-content">
<div class="detail-content"> <a-checkbox-group @change="checkboxChange" v-model="checkboxList">
<div class="detail-content-header" style="margin-bottom: 20px"> <div class="detail-content-content" v-for="(item,index) in resultData.resList" :key="index">
<a-checkbox @change="onChange" :indeterminate="indeterminate" :checked="checkAll" <a-checkbox :value="item.id" class="detail-checkbox"></a-checkbox>
style="margin-left: 20px;float: left"></a-checkbox> <div class="detail-content-content-text"
<div class="detail-content-header-content"> :class="{'detail-content-content-text-color':checkboxList.join(',').includes(item.id)}">
<div class="detail-content-header-content-left"
:title="resultData.serialNumberLeft + resultData.fileNameLeft"
:class="{'detail-content-header-content-left-active': isDisplay}">
{{$t('docTool.comparison.selectedStandard')}}:{{resultData.serialNumberLeft}}
<span style="cursor: pointer"
@click="fileClick(resultData.fileNameLeft,resultData.fileIdLeft)">{{resultData.fileNameLeft}}</span>
</div>
<div class="detail-content-header-content-content"
:title="resultData.serialNumberRight + resultData.fileNameRight"
:class="{'detail-content-header-content-left-active':isDisplay}">
{{$t('docTool.comparison.selectedStandard')}}:{{resultData.serialNumberRight}}
<span style="cursor: pointer"
@click="fileClick(resultData.fileNameRight,resultData.fileIdRight)">{{resultData.fileNameRight}}</span>
</div>
<div class="detail-content-header-content-rightOne"
:class="{'detail-content-header-content-rightOne-active':isDisplay}"
:title="$t('docTool.comparison.comparisonDifferenceComment')">
{{$t('docTool.comparison.comparisonDifferenceComment')}}
</div>
<div class="detail-content-header-content-right" v-if="!isDisplay">
{{$t('operation')}}
</div>
</div>
</div>
<a-checkbox-group @change="checkboxChange" v-model="checkboxList"
style="width: 100%;height: calc(100vh - 300px)">
<div class="detail-content-content" v-for="(item,index) in resultData.resList" :key="index">
<a-checkbox :value="item.id" class="detail-checkbox"></a-checkbox>
<div class="detail-content-content-text"
:class="{'detail-content-content-text-color':checkboxList.join(',').includes(item.id)}">
<div class="detail-content-content-text-left"
:class="{'detail-content-content-text-dis':isDisplay}">
<div class="detail-content-left">
<div class="detail-content-left-top">
<span>{{item.itemsNumLeft}}</span>
<span style="margin-left: 10px">{{item.itemsNameLeft}}</span>
</div>
<div class="detail-content-left-button" v-html="item.itemsTextLeft"></div>
</div>
<div class="detail-content-right">
<div class="detail-content-left-top">
<span>{{item.itemsNumRight}}</span>
<span style="margin-left: 10px">{{item.itemsNameRight}}</span>
</div>
<div class="detail-content-left-button" v-html="item.itemsTextRight"></div>
</div>
<div class="detail-content-right-one">
<div class="detail-content-left-button">
{{item.comment}}
</div>
</div>
<!-- <div class="detail-content-bottom"-->
<!-- :class="{'detail-content-bottom-color':checkboxList.join(',').includes(item.id)}">-->
<!-- <div class="detail-content-bottom-left"-->
<!-- :class="{'detail-content-bottom-left-text':language == 'en-us' ? true:false}"-->
<!-- :title="$t('docTool.comparison.comparisonDifferenceComment')">-->
<!-- <a-icon type="message"/>-->
<!-- {{$t('docTool.comparison.comparisonDifferenceComment')}}:-->
<!-- </div>-->
<!-- <div class="detail-content-bottom-right"-->
<!-- :class="{'detail-content-bottom-right-text':language == 'en-us' ? true:false}">-->
<!-- {{item.comment}}-->
<!-- </div>-->
<!-- </div>-->
</div>
<div class="detail-content-content-text-right" v-if="!isDisplay">
<span class="text-button-one">
<a class="text-button" @click="comparaEdit(item)">{{$t('edit')}}</a>
<a class="text-button" @click="comparaDelete(item)">{{$t('delete')}}</a>
</span>
</div>
</div>
</div>
</a-checkbox-group>
<div class="detail-content-content">
<a-checkbox @change="fullCheckboxChange" v-model="fullCheckbox" class="detail-checkbox">
</a-checkbox>
<div class="detail-content-content-text" :class="{'detail-content-content-text-color':fullCheckbox}">
<div class="detail-content-content-text-left" <div class="detail-content-content-text-left"
:class="{'detail-content-content-text-dis':isDisplay}"> :class="{'detail-content-content-text-dis':isDisplay}">
<div class="detail-content-content-text-left-text" :title="resultData.comments"> <div class="detail-content-left">
<span>{{$t('docTool.comparison.fullTextComments')}}:</span> {{resultData.comments}} <div class="detail-content-left-top">
<span>{{ item.itemsNumLeft }}</span>
<span style="margin-left: 10px">{{ item.itemsNameLeft }}</span>
</div>
<div class="detail-content-left-button" v-html="item.itemsTextLeft"></div>
</div> </div>
<div class="detail-content-right">
<div class="detail-content-left-top">
<span>{{ item.itemsNumRight }}</span>
<span style="margin-left: 10px">{{ item.itemsNameRight }}</span>
</div>
<div class="detail-content-left-button" v-html="item.itemsTextRight"></div>
</div>
<div class="detail-content-right-one">
<div class="detail-content-left-button">
{{ item.comment }}
</div>
</div>
<!-- <div class="detail-content-bottom"-->
<!-- :class="{'detail-content-bottom-color':checkboxList.join(',').includes(item.id)}">-->
<!-- <div class="detail-content-bottom-left"-->
<!-- :class="{'detail-content-bottom-left-text':language == 'en-us' ? true:false}"-->
<!-- :title="$t('docTool.comparison.comparisonDifferenceComment')">-->
<!-- <a-icon type="message"/>-->
<!-- {{$t('docTool.comparison.comparisonDifferenceComment')}}:-->
<!-- </div>-->
<!-- <div class="detail-content-bottom-right"-->
<!-- :class="{'detail-content-bottom-right-text':language == 'en-us' ? true:false}">-->
<!-- {{item.comment}}-->
<!-- </div>-->
<!-- </div>-->
</div> </div>
<div class="detail-content-content-text-right" v-if="!isDisplay"> <div class="detail-content-content-text-right" v-if="!isDisplay">
<span class="text-button-one"> <span class="text-button-one">
<a class="text-button" @click="fullTextEdit">{{$t('edit')}}</a> <a class="text-button" @click="comparaEdit(item)">{{ $t('edit') }}</a>
<!-- <a class="text-button">{{$t('delete')}}</a>--> <a class="text-button" @click="comparaDelete(item)">{{ $t('delete') }}</a>
</span> </span>
</div> </div>
</div> </div>
</div> </div>
</a-checkbox-group>
</div>
<div class="detail-content-content">
<a-checkbox @change="fullCheckboxChange" v-model="fullCheckbox" class="detail-checkbox">
</a-checkbox>
<div class="detail-content-content-text" :class="{'detail-content-content-text-color':fullCheckbox}">
<div class="detail-content-content-text-left"
:class="{'detail-content-content-text-dis':isDisplay}">
<div class="detail-content-content-text-left-text" :title="resultData.comments">
<span>{{ $t('docTool.comparison.fullTextComments') }}:</span> {{ resultData.comments }}
</div>
</div>
<div class="detail-content-content-text-right" v-if="!isDisplay">
<span class="text-button-one">
<a class="text-button" @click="fullTextEdit">{{ $t('edit') }}</a>
<!-- <a class="text-button">{{$t('delete')}}</a>-->
</span>
</div>
</div> </div>
</div> </div>
</div> </div>
<commentList ref="commentListRef"/> <commentList ref="commentListRef" />
<comparison-result-edit-modal ref="comparisonResultEditModal" @ok="getData"></comparison-result-edit-modal> <comparison-result-edit-modal ref="comparisonResultEditModal" @ok="getData"></comparison-result-edit-modal>
<div id="images"> <div id="images">
<div class="image" v-viewer="{movable: false}"> <div class="image" v-viewer="{movable: false}">
<img v-show="image" :src="imageUrl"> <img v-show="image" :src="imageUrl">
</div> </div>
</div> </div>
</a-spin> </internal-detail-page>
</template> </template>
<script> <script>
import { getAction, downloadFile, deleteAction, getFileAccessHttpUrl } from '@/api/manage' import { getAction, downloadFile, deleteAction, getFileAccessHttpUrl } from '../../../api/manage.js'
import { previewPdf } from '@/utils/previewPdf' import { previewPdf } from '../../../utils/previewPdf.js'
import { Base64 } from 'js-base64' import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import CommentList from './CommentList' import CommentList from '../modules/CommentList.vue'
import ComparisonResultEditModal from './ComparisonResultEditModal' import ComparisonResultEditModal from '../modules/ComparisonResultEditModal.vue'
import InternalDetailPage from '../../../components/InternalDetailPage.vue'
export default { export default {
name: 'ComparisonResults', name: 'ComparisonResults',
components: { CommentList, ComparisonResultEditModal }, components: { CommentList, ComparisonResultEditModal, InternalDetailPage },
data () { data () {
return { return {
loading: false, loading: false,
@@ -380,6 +361,7 @@ export default {
line-height: 68px; line-height: 68px;
} }
} }
.doc-detail-right { .doc-detail-right {
width: 600px; width: 600px;
line-height: 68px; line-height: 68px;
@@ -409,13 +391,19 @@ export default {
padding: 24px 32px 0 32px; padding: 24px 32px 0 32px;
box-sizing: border-box; box-sizing: border-box;
background: #fff; background: #fff;
margin-top: 68px; height: 100%;
}
.scroll-content {
height: calc(100% - 76px - 71px - 24px);
overflow: auto;
} }
.detail-content-header { .detail-content-header {
width: 100%; width: 100%;
height: 56px; height: 56px;
line-height: 56px; line-height: 56px;
margin-bottom: 20px;
} }
.detail-content-header-content { .detail-content-header-content {
@@ -724,4 +712,12 @@ export default {
.operator-text-text-text { .operator-text-text-text {
color: #00B3BE !important; color: #00B3BE !important;
} }
.header-btn {
margin-left: 12px;
}
.header-btn:first-child {
margin-left: 0;
}
</style> </style>
@@ -34,11 +34,14 @@
</a-form> </a-form>
</div> </div>
<div class="table-operator"> <div class="table-operator">
<!--发起对比-->
<!-- v-has="'documentComparison:Initiate'"--> <!-- v-has="'documentComparison:Initiate'"-->
<a-button icon="block" type="primary" ghost @click="initiatingProcessClick">{{ $t('docTool.comparison.initiateComparison') }} <a-button icon="block" type="primary" ghost @click="initiatingProcessClick">{{ $t('docTool.comparison.initiateComparison') }}
</a-button> </a-button>
<!--批量删除-->
<!-- v-has="'documentComparison:batchDelete'"--> <!-- v-has="'documentComparison:batchDelete'"-->
<a-button type="primary" icon="delete" ghost @click="batchDel" v-has="'split:sarFileSplitInfo:deleteBatch'">{{ $t('batchDelete') }}</a-button> <a-button type="primary" icon="delete" ghost @click="batchDelete" v-has="'split:sarFileSplitInfo:deleteBatch'">{{ $t('batchDelete') }}
</a-button>
</div> </div>
<div> <div>
<j-table <j-table
@@ -55,11 +58,23 @@
:operation-list="operationList" :operation-list="operationList"
@change="handleTableChange" @change="handleTableChange"
@operationClick="operationClick"> @operationClick="operationClick">
<template v-slot:serialNumberRight="{text,record}">
<a @click="serialNumberRightClick(record)" :title="text">{{ text }}</a> <!--旧文本跳转标准详情-->
<template v-slot:oldTextDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<div class="table-text can-click-table-text" v-if="text || text === 0" @click="toDetailPage('old', record)">{{ text }}</div>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template> </template>
<template v-slot:serialNumberLeft="{text,record}">
<a @click="serialNumberLeftClick(record)" :title="text">{{ text }}</a> <!--新文本跳转标准详情-->
<template v-slot:newTextDetail="{text, record}">
<a-tooltip overlay-class-name="tooltip-style">
<template slot="title">{{ text || text === 0 ? text : global.emptyLine }}</template>
<div class="table-text can-click-table-text" v-if="text || text === 0" @click="toDetailPage('new', record)">{{ text }}</div>
<div v-else class="table-text">{{ global.emptyLine }}</div>
</a-tooltip>
</template> </template>
</j-table> </j-table>
</div> </div>
@@ -67,11 +82,14 @@
</template> </template>
<script> <script>
import { postAction, deleteAction } from '../../../api/manage.js' import '../../../assets/less/common.less'
import { postAction } from '../../../api/manage.js'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import JDictSelectTag from '../../../components/dict/JDictSelectTag.vue' import JDictSelectTag from '../../../components/dict/JDictSelectTag.vue'
import JTable from '../../../components/jero/JTable.vue' import JTable from '../../../components/jero/JTable.vue'
import { JeroListMixin } from '../../../mixins/JeroListMixin.js' import { JeroListMixin } from '../../../mixins/JeroListMixin.js'
import { StandardSource } from '../../../enums/commonEnums.js'
import { withdrawPublication } from '../../../api/documentToolApi.js'
export default { export default {
name: 'DocumentComparison', name: 'DocumentComparison',
@@ -89,68 +107,70 @@ export default {
downLoadImgUrl: window._CONFIG.domianWebImgURL + '/sys/common/download', downLoadImgUrl: window._CONFIG.domianWebImgURL + '/sys/common/download',
userInfoQuery: {}, userInfoQuery: {},
columns: [ columns: [
// 旧文档文本号
{ {
title: this.$t('number') + ' 1', title: this.$t('docTool.comparison.oldDocumentTextNumber'),
dataIndex: 'serialNumberLeft', dataIndex: 'serialNumberLeft',
width: 170, width: 170,
ellipsis: true, ellipsis: true,
scopedSlots: { customRender: 'serialNumberLeft' } scopedSlots: { customRender: 'oldTextDetail' }
}, },
// 旧文档文本名称
{ {
title: this.$t('title') + ' 1', title: this.$t('docTool.comparison.oldDocumentTextName'),
dataIndex: 'titleLeft', dataIndex: 'titleLeft',
width: 170, width: 170,
ellipsis: true, scopedSlots: { customRender: 'oldTextDetail' }
scopedSlots: { customRender: 'serialNumberLeft' }
}, },
// 旧文本状态
{ {
title: this.$t('docTool.comparison.textStatus') + ' 1', title: this.$t('docTool.comparison.oldTextState'),
width: 150, width: 150,
ellipsis: true,
dataIndex: 'fileTypeLeft' dataIndex: 'fileTypeLeft'
}, },
// 新文档文本号
{ {
title: this.$t('number') + ' 2', title: this.$t('docTool.comparison.newDocumentTextNumber'),
dataIndex: 'serialNumberRight', dataIndex: 'serialNumberRight',
ellipsis: true, width: 170,
scopedSlots: { customRender: 'serialNumberRight' }, scopedSlots: { customRender: 'newTextDetail' }
width: 170
}, },
// 新文档文本名称
{ {
title: this.$t('title') + ' 2', title: this.$t('docTool.comparison.newDocumentTextName'),
dataIndex: 'titleRight', dataIndex: 'titleRight',
scopedSlots: { customRender: 'serialNumberRight' }, width: 170,
ellipsis: true, scopedSlots: { customRender: 'newTextDetail' }
width: 170
}, },
// 新文本状态
{ {
title: this.$t('docTool.comparison.textStatus') + ' 2', title: this.$t('docTool.comparison.newTextState'),
width: 150, width: 150,
ellipsis: true,
dataIndex: 'fileTypeRight' dataIndex: 'fileTypeRight'
}, },
// 发布情况
{ {
title: this.$t('docTool.comparison.releaseSituation'), title: this.$t('docTool.comparison.releaseSituation'),
width: 170, width: 170,
ellipsis: true,
dataIndex: 'releaseStateTitle' dataIndex: 'releaseStateTitle'
}, },
// 创建人
{ {
title: this.$t('creator'), title: this.$t('creator'),
width: 150, width: 150,
ellipsis: true,
dataIndex: 'createBy' dataIndex: 'createBy'
}, },
// 备注
{ {
title: this.$t('remarks'), title: this.$t('remarks'),
ellipsis: true,
width: 270, width: 270,
dataIndex: 'remark' dataIndex: 'remark'
}, },
// 操作
{ {
title: this.$t('operation'), title: this.$t('operation'),
fixed: 'right', fixed: 'right',
width: 310, width: 250,
scopedSlots: { customRender: 'action' } scopedSlots: { customRender: 'action' }
} }
], ],
@@ -222,40 +242,37 @@ export default {
this.loadData(1) this.loadData(1)
}, },
methods: { methods: {
getList () {
this.dataSource = [{ id: 1, serialNumberLeft: '11' }]
},
batchDelete () { batchDelete () {
if (this.selectedRowKeys.length > 0) { if (!this.selectedRowKeys || this.selectedRowKeys.length === 0) {
this.$confirm({ this.$message.warning(this.$t('selectLeastOne'))
content: this.$t('confirmBatchDeletion'), return
onOk: () => { }
const idList = [] this.$confirm({
const selectionRows = JSON.parse(JSON.stringify(this.selectionRows)) content: this.$t('confirmBatchDeletion'),
for (let i = 0; i < selectionRows.length; i++) { onOk: () => {
if (selectionRows[i].createBy === this.userInfo.username && const idList = []
selectionRows[i].releaseState === 'draft') { const selectionRows = JSON.parse(JSON.stringify(this.selectionRows))
idList.push(selectionRows[i].id) for (let i = 0; i < selectionRows.length; i++) {
} if (selectionRows[i].createBy === this.userInfo.username &&
} selectionRows[i].releaseState === 'draft') {
if (idList.length > 0) { idList.push(selectionRows[i].id)
deleteAction(this.url.deleteBatch, { ids: idList.join(',') }).then((res) => {
if (res.success) {
this.$message.success(this.$t('operationSuccessful'))
this.selectedRowKeys = []
this.getList()
} else {
this.$message.warning(res.message)
}
})
} else {
this.$message.warning(this.$t('doNotHavePermissionDeleteData'))
} }
} }
}) if (idList.length > 0) {
} else { postAction(this.url.deleteBatch, { ids: idList.join(',') }).then((res) => {
this.$message.warning(this.$t('selectLeastOne')) if (res.success) {
} this.$message.success(this.$t('operationSuccessful'))
this.selectedRowKeys = []
this.loadData(1)
} else {
this.$message.warning(res.message)
}
})
} else {
this.$message.warning(this.$t('doNotHavePermissionDeleteData'))
}
}
})
}, },
// 对比结果按钮点击 // 对比结果按钮点击
comparisonResultsClick (item) { comparisonResultsClick (item) {
@@ -264,14 +281,13 @@ export default {
} else { } else {
item.isDisplay = 1 item.isDisplay = 1
} }
const newUrl = this.$router.resolve({ this.$router.push({
path: '/comparisonResults', path: '/documentTool/ComparisonResults',
query: { query: {
id: item.id, id: item.id,
isDisplay: item.isDisplay isDisplay: item.isDisplay
} }
}) })
window.open(newUrl.href, '_blank')
}, },
// 撤回按钮点击 // 撤回按钮点击
subscribe (record) { subscribe (record) {
@@ -288,17 +304,21 @@ export default {
releaseState: releaseState, releaseState: releaseState,
id: record.id id: record.id
} }
postAction('/compare/sarFileCompareInfo/changeState', query).then((res) => { withdrawPublication(query).then((res) => {
if (res.success) { if (res.success) {
this.$message.success(this.$t('operationSuccessful')) this.$message.success(res.message)
this.getList() this.loadData(1)
} else { } else {
this.$message.warning(this.$t('operationFailed')) this.$message.warning(res.message)
} }
}) })
} }
}) })
}, },
/**
* 编辑
* @param row
*/
edit (row) { edit (row) {
this.$router.push({ this.$router.push({
path: '/documentTool/DocumentDataComparison', path: '/documentTool/DocumentDataComparison',
@@ -307,55 +327,72 @@ export default {
} }
}) })
}, },
// 发起对比按钮点击 /**
* 发起比对
*/
initiatingProcessClick () { initiatingProcessClick () {
this.$router.push({ this.$router.push({
path: '/documentTool/InitiateComparison' path: '/documentTool/InitiateComparison'
}) })
// let newUrl = this.$router.resolve({
// path: '/initiateDocumentComparison'
// })
// window.open(newUrl.href, '_blank')
}, },
deleteData (val) { /**
this.$confirm({ * 跳转标准详情
content: this.$t('confirmDeletion'), * @param type
onOk: () => { * @param record
deleteAction(this.url.deleteBatch, { ids: val.id }).then((res) => { */
if (res.success) { toDetailPage (type, record) {
this.$message.success(this.$t('operationSuccessful')) let standardId, standardNumber, standardSource, path, query
this.getList() // 判断是新旧那个标准点击的,取字段
} else { if (type === 'old') {
this.$message.warning(res.message) standardId = record.standardIdLeft
} standardNumber = record.serialNumberLeft
}) standardSource = record.standardSourceLeft
} }
if (type === 'new') {
standardId = record.standardIdRight
standardNumber = record.serialNumberRight
standardSource = record.standardSourceRight
}
// 根据来源跳转不同的详情页
switch (standardSource) {
// 国内
case StandardSource.DOMESTIC.value:
path = '/standardRegulationLibrary/DomesticStandardDetail'
query = {
id: standardId,
type: standardSource,
standardNumber: standardNumber
}
break
// 企标
case StandardSource.OVERSEAS.value:
path = ''
query = {
id: standardId,
type: standardSource,
standardNumber: standardNumber
}
break
// 海外
case StandardSource.ENTERPRISE.value:
path = '/enterpriseStandardLibrary/enterpriseStandardDetail'
query = {
id: standardId
}
break
default:
break
}
if (!path) {
return
}
this.$openPageNewSheet({
path, query
}) })
},
// 编号2和标题2列的点击事件
serialNumberRightClick (row) {
const newUrl = this.$router.resolve({
path: '/documentManage/library/detail',
query: {
id: row.fileKeyRight
}
})
window.open(newUrl.href, '_blank')
},
// 编号1列和标题1列的点击事件
serialNumberLeftClick (row) {
const newUrl = this.$router.resolve({
path: '/documentManage/library/detail',
query: {
id: row.fileKeyLeft
}
})
window.open(newUrl.href, '_blank')
} }
} }
} }
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import '~../../../assets/less/common.less';
</style> </style>
@@ -1,5 +1,9 @@
<template> <template>
<internal-detail-page :title="$t('docTool.comparison.documentComparison')" :content-padding="0" :loading="loading"> <internal-detail-page :title="$t('docTool.comparison.documentComparison')"
:content-padding="0"
:loading="loading"
need-custom-back-func
@back="handleBack">
<template v-slot:titleRightCustom> <template v-slot:titleRightCustom>
<!--查看比对结果--> <!--查看比对结果-->
<a-button class="header-btn" type="primary" icon="eye" ghost @click="viewTheComparisonResultsClick"> <a-button class="header-btn" type="primary" icon="eye" ghost @click="viewTheComparisonResultsClick">
@@ -95,9 +99,9 @@
</div> </div>
<div class="submit-button"> <div class="submit-button">
<a-button style="margin-right: 10px" type="primary" @click="consistentAssessmentClick()">{{ $t('docTool.comparison.consistentAssessment') }} <a-button style="margin-right: 10px" type="primary" @click="consistentAssessmentClick">{{ $t('docTool.comparison.consistentAssessment') }}
</a-button> </a-button>
<a-button type="primary" @click="submit()">{{ $t('preservation') }}</a-button> <a-button type="primary" @click="submit">{{ $t('preservation') }}</a-button>
</div> </div>
<comparison-add-full-comment ref="comparisonAddFullComment"></comparison-add-full-comment> <comparison-add-full-comment ref="comparisonAddFullComment"></comparison-add-full-comment>
@@ -105,10 +109,10 @@
</template> </template>
<script> <script>
import { postAction, getAction } from '../../../api/manage.js'
// 添加全文评论弹框 // 添加全文评论弹框
import ComparisonAddFullComment from './modules/ComparisonAddFullComment.vue' import ComparisonAddFullComment from './modules/ComparisonAddFullComment.vue'
import InternalDetailPage from '../../../components/InternalDetailPage.vue' import InternalDetailPage from '../../../components/InternalDetailPage.vue'
import { docComparsionConsistentAndSave, getComparisonDetail, clauseComparison } from '../../../api/documentToolApi.js'
export default { export default {
name: 'DocumentDataComparison', name: 'DocumentDataComparison',
@@ -122,7 +126,8 @@ export default {
resultData: {}, resultData: {},
isMatching: true, // 自动匹配是否开启 isMatching: true, // 自动匹配是否开启
dataLeft: {}, dataLeft: {},
dataRight: {} dataRight: {},
pageFrom: null
} }
}, },
mounted () { mounted () {
@@ -130,11 +135,6 @@ export default {
document.title = this.$t('docTool.comparison.documentComparison') + ' - ' + this.$t('edit') document.title = this.$t('docTool.comparison.documentComparison') + ' - ' + this.$t('edit')
}, },
methods: { methods: {
goBack () {
this.$router.push({
path: '/documentTool/documentComparison'
})
},
// 文档对比的一致按钮点击 // 文档对比的一致按钮点击
consistentAssessmentClick () { consistentAssessmentClick () {
if (!this.dataLeft.id && !this.dataRight.id) { if (!this.dataLeft.id && !this.dataRight.id) {
@@ -148,7 +148,7 @@ export default {
comment: '一致' comment: '一致'
} }
this.loading = true this.loading = true
postAction('/compare/sarFileCompareItemComment/add', query).then((res) => { docComparsionConsistentAndSave(query).then((res) => {
if (res.success) { if (res.success) {
this.$message.success(this.$t('operationSuccessful')) this.$message.success(this.$t('operationSuccessful'))
this.formInline = {} this.formInline = {}
@@ -195,7 +195,7 @@ export default {
comment: this.formInline.comment comment: this.formInline.comment
} }
this.loading = true this.loading = true
postAction('/compare/sarFileCompareItemComment/add', query).then((res) => { docComparsionConsistentAndSave(query).then((res) => {
if (res.success) { if (res.success) {
this.$message.success(this.$t('operationSuccessful')) this.$message.success(this.$t('operationSuccessful'))
this.formInline = {} this.formInline = {}
@@ -234,21 +234,20 @@ export default {
}, },
// 查看对比结果按钮点击 // 查看对比结果按钮点击
viewTheComparisonResultsClick () { viewTheComparisonResultsClick () {
const newUrl = this.$router.resolve({ this.$router.push({
path: '/comparisonResults', path: '/documentTool/ComparisonResults',
query: { query: {
id: this.$route.query.id, id: this.$route.query.id,
isDisplay: 2 isDisplay: 2
} }
}) })
window.open(newUrl.href, '_blank')
}, },
// 添加全文评论按钮点击 // 添加全文评论按钮点击
addFullTextCommentClick () { addFullTextCommentClick () {
const query = { const query = {
id: this.$route.query.id id: this.$route.query.id
} }
postAction('/compare/sarFileCompareInfo/getComparisonDetail', query).then((res) => { getComparisonDetail(query).then((res) => {
if (res.success) { if (res.success) {
this.$refs.comparisonAddFullComment.open(res.result.comments || '') this.$refs.comparisonAddFullComment.open(res.result.comments || '')
} }
@@ -265,7 +264,7 @@ export default {
id: this.$route.query.id id: this.$route.query.id
} }
this.loading = true this.loading = true
postAction('/compare/sarFileCompareInfo/getComparisonDetail', query).then((res) => { getComparisonDetail(query).then((res) => {
if (res.success) { if (res.success) {
this.resultData = res.result || {} this.resultData = res.result || {}
} else { } else {
@@ -350,7 +349,7 @@ export default {
rightId: this.dataRight.id rightId: this.dataRight.id
} }
this.loadingText = true this.loadingText = true
getAction('/compare/sarFileCompareItem/clauseComparison', query).then((res) => { clauseComparison(query).then((res) => {
if (res.success) { if (res.success) {
this.loadingText = false this.loadingText = false
this.resultData.textLeft[this.dataLeft.numIndex].itemsText = res.result[0] this.resultData.textLeft[this.dataLeft.numIndex].itemsText = res.result[0]
@@ -391,6 +390,11 @@ export default {
return return
} }
} }
},
handleBack () {
this.$router.push({
path: '/documentTool/documentComparison'
})
} }
} }
} }
@@ -4,7 +4,7 @@
<div class="detail-content-box"> <div class="detail-content-box">
<div class="detail-content-left"> <div class="detail-content-left">
<a-form layout="inline" @keyup.enter.native="searchQueryLeft"> <a-form layout="inline" @keyup.enter.native="searchQueryLeft">
<a-row :gutter="24"> <a-row>
<a-col :md="8" :sm="8"> <a-col :md="8" :sm="8">
<a-form-item :label="$t('number')" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item :label="$t('number')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('number')" <a-input :placeholder="$t('pleaseEnter')+$t('number')"
@@ -54,7 +54,7 @@
</div> </div>
<div class="detail-content-right"> <div class="detail-content-right">
<a-form layout="inline" @keyup.enter.native="searchQueryRight"> <a-form layout="inline" @keyup.enter.native="searchQueryRight">
<a-row :gutter="24"> <a-row>
<a-col :md="8" :sm="8"> <a-col :md="8" :sm="8">
<a-form-item :label="$t('number')" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item :label="$t('number')" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :placeholder="$t('pleaseEnter')+$t('number')" <a-input :placeholder="$t('pleaseEnter')+$t('number')"
@@ -134,12 +134,12 @@
<script> <script>
import JTable from '../../../components/jero/JTable.vue' import JTable from '../../../components/jero/JTable.vue'
import { getAction, downloadFile, getFileAccessHttpUrl } from '../../../api/manage.js' import { downloadFile, getFileAccessHttpUrl } from '../../../api/manage.js'
import { previewPdf } from '../../../utils/previewPdf.js' import { previewPdf } from '../../../utils/previewPdf.js'
import { Base64 } from 'js-base64' import { Base64 } from 'js-base64'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import InternalDetailPage from '../../../components/InternalDetailPage.vue' import InternalDetailPage from '../../../components/InternalDetailPage.vue'
import { getInitComparsionPageData, submitInitComparsion } from '../../../api/documentToolApi.js'
export default { export default {
name: 'InitiateComparison', name: 'InitiateComparison',
@@ -151,7 +151,7 @@ export default {
span: 6 span: 6
}, },
wrapperCol: { wrapperCol: {
span: 14 span: 18
}, },
loadingLeft: false, loadingLeft: false,
queryParamLeft: {}, queryParamLeft: {},
@@ -273,10 +273,6 @@ export default {
width: 79 width: 79
} }
], ],
url: {
list: '/split/sarFileSplitInfo/page',
add: '/compare/sarFileCompareInfo/fullTextComparison'
},
image: false, image: false,
imageUrl: '' imageUrl: ''
} }
@@ -342,38 +338,36 @@ export default {
this.getListRight() this.getListRight()
}, },
submit () { submit () {
this.$router.push({ if (!this.selectedRowsRight[0] || !this.selectedRowsLeft[0]) {
path: '/documentTool/DocumentDataComparison' this.$message.warning(this.$t('pleaseSelectTheDataCompared'))
return
}
this.$refs.ruleForm.validate(valid => {
if (valid) {
this.loading = true
const query = {
leftStandard: this.selectedRowsLeft[0].id,
rightStandard: this.selectedRowsRight[0].id,
remark: this.formInline.remark
}
submitInitComparsion(query).then((res) => {
if (res.success) {
console.log(res)
this.loading = false
this.$message.success(this.$t('operationSuccessful'))
this.$router.push({
path: '/documentTool/DocumentDataComparison',
query: {
id: res.result
}
})
} else {
this.loading = false
this.$message.warning(this.$t('operationFailed'))
}
})
}
}) })
// if (!this.selectedRowsRight[0] || !this.selectedRowsLeft[0]) {
// this.$message.warning(this.$t('pleaseSelectTheDataCompared'))
// return
// }
// this.$refs.ruleForm.validate(valid => {
// if (valid) {
// this.loading = true
// const query = {
// leftStandard: this.selectedRowsLeft[0].id,
// rightStandard: this.selectedRowsRight[0].id,
// remark: this.formInline.remark
// }
// postAction(this.url.add, query).then((res) => {
// if (res.success) {
// this.loading = false
// this.$message.success(this.$t('operationSuccessful'))
// this.$router.push({
// path: '/documentDataComparison',
// query: {
// id: res.result
// }
// })
// } else {
// this.loading = false
// this.$message.warning(this.$t('operationFailed'))
// }
// })
// }
// })
}, },
getListLeft () { getListLeft () {
const queryParam = JSON.parse(JSON.stringify(this.queryParamLeft)) const queryParam = JSON.parse(JSON.stringify(this.queryParamLeft))
@@ -389,7 +383,7 @@ export default {
...queryParam ...queryParam
} }
this.loadingLeft = true this.loadingLeft = true
getAction(this.url.list, query).then((res) => { getInitComparsionPageData(query).then((res) => {
if (res.success) { if (res.success) {
if (res.result.current > 1 && res.result.records.length === 0) { if (res.result.current > 1 && res.result.records.length === 0) {
this.ipaginationLeft.current = 1 this.ipaginationLeft.current = 1
@@ -447,7 +441,7 @@ export default {
...queryParam ...queryParam
} }
this.loadingRight = true this.loadingRight = true
getAction(this.url.list, query).then((res) => { getInitComparsionPageData(query).then((res) => {
if (res.success) { if (res.success) {
if (res.result.current > 1 && res.result.records.length === 0) { if (res.result.current > 1 && res.result.records.length === 0) {
this.pageNoRight = 1 this.pageNoRight = 1
@@ -5,25 +5,22 @@
:visible="visible" :visible="visible"
:confirm-loading="confirmLoading" :confirm-loading="confirmLoading"
:maskClosable="false" :maskClosable="false"
@cancel="visible = false" @cancel="visible = false">
>
<template slot="footer"> <template slot="footer">
<a-button type="primary" :loading="confirmLoading" @click="fullTextCommentsSubmit"> <a-button type="primary" :loading="confirmLoading" @click="fullTextCommentsSubmit">
{{$t('submit')}} {{ $t('submit') }}
</a-button> </a-button>
</template> </template>
<a-form-model :model="formInlineText" class="formAdd" :rules="rulesText" ref="ruleFormText"> <a-form-model :model="formInlineText" class="formAdd" :rules="rulesText" ref="ruleFormText">
<div class="box-title-text-remarks"> <a-form-model-item prop="comment"
<div class="title-text-remarks" :title="$t('docTool.comparison.fullTextComments')"> :labelCol="labelCol" :wrapperCol="wrapperCol"
<span>{{$t('docTool.comparison.fullTextComments')}}</span> :label="$t('docTool.comparison.fullTextComments')">
</div> <a-textarea :placeholder="$t('pleaseEnter')+' '+$t('docTool.comparison.fullTextComments')"
<a-form-model-item class="item-model" style="width: calc(100% - 113px)" prop="comment"> v-model.trim="formInlineText.comment"
<a-textarea :placeholder="$t('pleaseEnter')+' '+$t('docTool.comparison.fullTextComments')" :maxLength="500"
v-model.trim="formInlineText.comment" :rows="4" />
:maxLength="500" </a-form-model-item>
:rows="4"/>
</a-form-model-item>
</div>
</a-form-model> </a-form-model>
</a-modal> </a-modal>
</template> </template>
@@ -38,12 +35,19 @@ export default {
visible: false, // 全文评论弹框是否显示 visible: false, // 全文评论弹框是否显示
confirmLoading: false, confirmLoading: false,
formInlineText: {}, formInlineText: {},
rulesText: {} rulesText: {},
labelCol: {
span: 5
},
wrapperCol: {
span: 18
}
} }
}, },
methods: { methods: {
open (comments) { open (comments) {
this.formInlineText.comment = comments this.formInlineText.comment = comments
this.visible = true
}, },
// 添加全文评论弹框的提交按钮 // 添加全文评论弹框的提交按钮
fullTextCommentsSubmit () { fullTextCommentsSubmit () {
@@ -67,7 +71,7 @@ export default {
}) })
} }
}) })
}, }
} }
} }
</script> </script>