Merge remote-tracking branch 'origin/dev_third_stage' into dev_third_stage

This commit is contained in:
CD
2022-10-10 15:08:25 +08:00
9 changed files with 364 additions and 113 deletions
@@ -8,8 +8,10 @@ public class SarFileCompareResultVO {
private String infoId; private String infoId;
private String serialNumberLeft; private String serialNumberLeft;
private String fileNameLeft; private String fileNameLeft;
private String fileIdLeft;
private String serialNumberRight; private String serialNumberRight;
private String fileNameRight; private String fileNameRight;
private String fileIdRight;
private List<SarFileCompareItemComVO> resList; private List<SarFileCompareItemComVO> resList;
private String comments; private String comments;
@@ -78,4 +80,20 @@ public class SarFileCompareResultVO {
public void setComments(String comments) { public void setComments(String comments) {
this.comments = comments; this.comments = comments;
} }
public String getFileIdLeft() {
return fileIdLeft;
}
public void setFileIdLeft(String fileIdLeft) {
this.fileIdLeft = fileIdLeft;
}
public String getFileIdRight() {
return fileIdRight;
}
public void setFileIdRight(String fileIdRight) {
this.fileIdRight = fileIdRight;
}
} }
@@ -143,8 +143,10 @@ public class SarFileCompareItemCommentServiceImpl extends ServiceImpl<SarFileCom
resultVO.setInfoId(infoId); resultVO.setInfoId(infoId);
resultVO.setSerialNumberLeft(sfcInfo.getSerialNumberLeft()); resultVO.setSerialNumberLeft(sfcInfo.getSerialNumberLeft());
resultVO.setFileNameLeft(sfcInfo.getFileNameLeft()); resultVO.setFileNameLeft(sfcInfo.getFileNameLeft());
resultVO.setFileIdLeft(sfcInfo.getFileIdLeft());
resultVO.setSerialNumberRight(sfcInfo.getSerialNumberRight()); resultVO.setSerialNumberRight(sfcInfo.getSerialNumberRight());
resultVO.setFileNameRight(sfcInfo.getFileNameRight()); resultVO.setFileNameRight(sfcInfo.getFileNameRight());
resultVO.setFileIdRight(sfcInfo.getFileIdRight());
resultVO.setComments(sfcInfo.getComments()); resultVO.setComments(sfcInfo.getComments());
List<SarFileCompareItemComment> list = queryListByInfoId(infoId,comment); List<SarFileCompareItemComment> list = queryListByInfoId(infoId,comment);
@@ -3754,7 +3754,26 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl<FileSplitItemsEOMap
@Override @Override
public int insertForeach(List<SarFileSplitItemsEO> messageList) { public int insertForeach(List<SarFileSplitItemsEO> messageList) {
return dao.insertForeach(messageList); // 解决一次批量插入太多 PacketTooBigException 异常
int total = messageList.size();
int count = 0;
int pageSum = 1;
if(total > 100) {
pageSum = total / 100; // 总页数
if ((total % 100) > 0) {
pageSum += 1;
}
}
List<SarFileSplitItemsEO> subList = new ArrayList<>();
for(int i = 0; i < pageSum; i++) {
int j = i*100+100;
if (i == pageSum -1) {
j = total;
}
subList = messageList.subList(i*100, j);
count += dao.insertForeach(subList);
}
return count;
} }
/** /**
@@ -1784,7 +1784,7 @@ public class FileSplitPdfService {
if(StringUtils.isNotBlank(preName)) { if(StringUtils.isNotBlank(preName)) {
List<String> nowStartList = fileSpiltService.getNewNowStart(preName); List<String> nowStartList = fileSpiltService.getNewNowStart(preName);
List<String> subList1 = startDigitList.subList(preNameNum, startDigitList.size()-1); List<String> subList1 = startDigitList.subList(preNameNum, startDigitList.size());
// 后文有一级以下的标题 // 后文有一级以下的标题
for (int i = nowStartList.size() - 1; i >= 1; i--) { for (int i = nowStartList.size() - 1; i >= 1; i--) {
int index1 = subList1.indexOf(nowStartList.get(i)); int index1 = subList1.indexOf(nowStartList.get(i));
@@ -12,6 +12,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -79,8 +80,26 @@ public class SarFileSplitItemsValEOServiceImpl extends ServiceImpl<SarFileSplitI
@Override @Override
public int insertForeach(List<SarFileSplitItemsValEO> itemValList) { public int insertForeach(List<SarFileSplitItemsValEO> itemValList) {
// 解决一次批量插入太多 PacketTooBigException 异常
return dao.insertForeach(itemValList); int total = itemValList.size();
int count = 0;
int pageSum = 1;
if(total > 100) {
pageSum = total / 100; // 总页数
if ((total % 100) > 0) {
pageSum += 1;
}
}
List<SarFileSplitItemsValEO> subList = new ArrayList<>();
for(int i = 0; i < pageSum; i++) {
int j = i*100+100;
if (i == pageSum -1) {
j = total;
}
subList = itemValList.subList(i*100, j);
count += dao.insertForeach(subList);
}
return count;
} }
} }
+292 -100
View File
@@ -15,18 +15,38 @@
allowClear allowClear
:placeholder="$t('NodeQuickLookup')"/> :placeholder="$t('NodeQuickLookup')"/>
<div class="drawer-content"> <div class="drawer-content">
<a-tree <virtualNodeTree
v-if="visibleTree" v-if="treeVisible"
style="margin-bottom: 60px;height: 600px" ref="virtualNodeTreeRef"
checkable :keeps="40"
:autoExpandParent="false" show-checkbox
:tree-data="gData" v-model="checkboxList"
@select="onSelect" class="treeWrap"
@check="checkChange" :defaultCheckedKeys="defaultCheckedKeys"
@expand="onExpand" :defaultExpandAll="defaultExpandAll"
:defaultExpandedKeys="defaultExpandedKeys" :check-strictly="false"
> node-key="id"
</a-tree> @check="handleCheckChange"
@check-change="checkChange"
:data.sync="gData">
<span slot-scope="{ data }">
<span :class="{'active':data.color ? true:false}">
{{ data.title }}
</span>
</span>
</virtualNodeTree>
<!-- <a-tree-->
<!-- v-if="visibleTree"-->
<!-- style="margin-bottom: 60px;height: 600px"-->
<!-- checkable-->
<!-- :autoExpandParent="false"-->
<!-- :tree-data="gData"-->
<!-- @select="onSelect"-->
<!-- @check="checkChange"-->
<!-- @expand="onExpand"-->
<!-- :defaultExpandedKeys="defaultExpandedKeys"-->
<!-- >-->
<!-- </a-tree>-->
</div> </div>
</a-spin> </a-spin>
<div class="drawer-bootom-button"> <div class="drawer-bootom-button">
@@ -40,15 +60,20 @@
<script> <script>
import { getAction, postAction } from '@/api/manage' import { getAction, postAction } from '@/api/manage'
import eventBUs from '../../common/event' import eventBUs from '../../common/event'
import virtualNodeTree from '@/components/virtualNodeTree/tree'
export default { export default {
name: 'index', name: 'index',
components: {
virtualNodeTree
},
data() { data() {
return { return {
gData: [], gData: [],
searchModel: '', searchModel: '',
autoExpandParent: true, autoExpandParent: true,
expandedKeys: [], expandedKeys: [],
checkboxList: [],
visible: false, visible: false,
confirmLoading: false, confirmLoading: false,
selectedKey: [], selectedKey: [],
@@ -56,42 +81,149 @@
userIds: [], userIds: [],
departId: '', departId: '',
defaultExpandedKeys: [], defaultExpandedKeys: [],
defaultExpandAll: false,
defaultCheckedKeys: [],
content: [], content: [],
userName: [], userName: [],
submitLoading: false, submitLoading: false,
visibleTree: false visibleTree: false,
treeVisible: false
} }
}, },
mounted() { mounted() {
}, },
methods: { methods: {
getPush(data) { checkChange(val, checked, indeterminate) {
this.tableKey = data if (!checked && this.searchData) {
this.userName = [] this.userName = this.userName.filter(res => {
this.content = [] return res != val.title
this.searchModel = '' })
this.visible = true this.userIds = this.userIds.filter(res => {
this.visibleTree = false return res != val.id
this.$nextTick(() => { })
this.departId = '' for (let i = 0; i < this.userIds.length; i++) {
this.queryDepartUserTreeList() if (this.userIds[i] == val.parentId) {
}) this.userIds.splice(i, 1)
}, this.userName.splice(i, 1)
onSelect(selectedKeys) { i--
this.selectedKey = selectedKeys
},
onExpand(selectedKeys, val) {
if (this.searchModel == '' || !this.searchModel) {
if (val.expanded) {
if (this.departId == val.node.value) {
} else {
this.departId = val.node.value
this.queryDepartUserTreeList()
} }
} }
} else if (checked && this.searchData) {
this.userName.push(val.title)
this.userIds.push(val.id)
}
},
handleCheckChange(val, data, checked) {
if (!this.searchData) {
this.userName = []
this.userIds = []
if (data.checkedNodes && data.checkedNodes.length > 0) {
data.checkedNodes.forEach(res => {
this.userName.push(res.title)
this.userIds.push(res.id)
})
}
} }
}, },
getPush(data) {
this.tableKey = data
this.userName = []
this.userIds = []
this.content = []
this.defaultCheckedKeys = []
this.searchModel = ''
this.visible = true
this.visibleTree = false
this.treeVisible = false
// this.$nextTick(() => {
// this.departId = ''
// this.queryDepartUserTreeList()
// })
let gData = localStorage.getItem('gData')
if (gData) {
let dataList = JSON.parse(gData)
dataList.forEach(res => {
if (res.type == 'Depart') {
res.disabled = true
}
})
this.dataList = this.toTree(dataList)
}
setTimeout(() => {
if (gData) {
this.gData = this.dataList
this.gData = [...this.gData]
this.treeVisible = true
} else {
this.queryDepartUserTreeList(1)
}
}, 200)
},
deleteChildren(value, arr) {
let newarr = []
arr.forEach(element => {
if (element.title.indexOf(value) > -1) { // 判断条件
newarr.push(element)
} else {
if (element.children && element.children.length > 0) {
let redata = this.deleteChildren(value, element.children)
if (redata && redata.length > 0) {
let obj = {
...element,
children: redata
}
newarr.push(obj)
}
}
}
})
return newarr
},
// 将数据拼成树形结构
toTree(config, num) {
// 删除 所有 children,以防止多次调用
config.forEach(function(item) {
delete item.children
})
// 将数据存储为 以 id 为 KEY 的 map 索引数据列
let map = {}
config.forEach((item) => {
item.label = item.name
item.key = item.id
item.title = item.name + (item.itemName ? ' ' + item.itemName : '')
map[item.id] = item
})
let val = []
config.forEach((item) => {
// 以当前遍历项,的pid,去map对象中找到索引的id
let parent = map[item.parentId]
// 如果找到索引,那么说明此项不在顶级当中,那么需要把此项添加到,他对应的父级中
if (parent) {
(parent.children || (parent.children = [])).push(item)
} else {
//如果没有在map中找到对应的索引ID,那么直接把 当前的item添加到 val结果集中,作为顶级
val.push(item)
}
})
return val
},
// onSelect(selectedKeys) {
// this.selectedKey = selectedKeys
// },
// onExpand(selectedKeys, val) {
// if (this.searchModel == '' || !this.searchModel) {
// if (val.expanded) {
// if (this.departId == val.node.value) {
// } else {
// this.departId = val.node.value
// this.queryDepartUserTreeList()
// }
// }
// }
// },
handleCancel() { handleCancel() {
this.visible = false this.visible = false
this.visibleTree = false this.visibleTree = false
@@ -125,84 +257,137 @@
}) })
}, },
onSearch(e) { onSearch(e) {
this.gData = [] this.treeVisible = false
this.departId = '' let p = new Promise((resolve, reject) => {
this.visibleTree = false resolve()
if (e) {
this.getUserAndDepart()
} else {
this.queryDepartUserTreeList()
}
},
getUserAndDepart() {
getAction('sys/user/getUserAndDepart', { name: this.searchModel }).then((res) => {
if (res){
this.gData = res.filter(ele => ele.flag === 'DEPART');
} else {
this.gData = []
}
this.visibleTree = true
}) })
p.then(() => {
this.searchData = e
let gData = localStorage.getItem('gData')
let content = []
if (gData) {
if (e) {
JSON.parse(gData).forEach(res => {
if (res.type == 'User') {
if (res.name.includes(e)) {
res.color = true
content.push(res)
}
}
})
let gDataAdmin = this.toTree(content)
this.gData = this.deleteChildren(e, gDataAdmin)
this.defaultExpandAll = true
this.treeVisible = true
this.defaultCheckedKeys = this.userIds
this.defaultCheckedKeys = [...this.defaultCheckedKeys]
this.loading = false
} else {
let content = JSON.parse(gData)
content.forEach(res => {
if (res.type == 'Depart') {
res.disabled = true
}
})
this.gData = this.toTree(content)
this.defaultExpandAll = false
this.defaultCheckedKeys = this.userIds
this.defaultCheckedKeys = [...this.defaultCheckedKeys]
this.treeVisible = true
this.loading = false
}
}
})
// this.gData = []
// this.departId = ''
// this.visibleTree = false
// if (e) {
// this.getUserAndDepart()
// } else {
// this.queryDepartUserTreeList()
// }
}, },
// getUserAndDepart() {
// getAction('sys/user/getUserAndDepart', { name: this.searchModel }).then((res) => {
// if (res) {
// this.gData = res.filter(ele => ele.flag === 'DEPART')
// } else {
// this.gData = []
// }
// this.visibleTree = true
// })
// },
queryDepartUserTreeList() { queryDepartUserTreeList() {
let gData = JSON.parse(JSON.stringify(this.gData)) // let gData = JSON.parse(JSON.stringify(this.gData))
if (gData && gData.length > 0) { // if (gData && gData.length > 0) {
gData = JSON.stringify(gData) // gData = JSON.stringify(gData)
} else { // } else {
gData = '' // gData = ''
} // }
this.confirmLoading = true this.confirmLoading = true
postAction('sys/user/queryDepartUserTreeList', { getAction('sys/user/queryUserTreeList', {
departId: this.departId, // departId: this.departId,
flag: '1', // flag: '1',
json: gData // json: gData
}).then((res) => { }).then((res) => {
this.confirmLoading = false this.confirmLoading = false
if (res.success) { if (res.success) {
this.gData = res.result let content = JSON.parse(JSON.stringify(res.result))
this.defaultExpandedKeys = [this.departId] res.result.forEach(res => {
if (res.type == 'Depart') {
res.disabled = true
}
})
localStorage.removeItem('gData')
localStorage.setItem('gData', JSON.stringify(content))
this.gData = this.toTree(res.result)
this.gData = [...this.gData]
// this.gData = res.result
// this.defaultExpandedKeys = [this.departId]
this.defaultExpandAll = false
this.treeVisible = true
this.visibleTree = true this.visibleTree = true
} else { } else {
this.gData = [] this.gData = []
} }
}) })
},
checkChange(e, info) {
this.userIds = e
this.userName = []
if (info.checkedNodes && info.checkedNodes.length > 0) {
info.checkedNodes.forEach(res => {
if (res.data.props.dataRef.key) {
this.content.push({
id: res.data.props.dataRef.key,
title: res.data.props.dataRef.title
})
} else {
this.content.push({
id: res.data.props.id,
title: res.data.props.title
})
}
})
}
if (this.content && this.content.length > 0) {
for (let i = 0; i < this.content.length; i++) {
for (let j = i + 1; j < this.content.length; j++) {
if (this.content[i].id == this.content[j].id) {
this.content.splice(j, 1)
j--
}
}
}
this.userIds.forEach(res => {
this.content.forEach(val => {
if (res == val.id) {
this.userName.push(val.title)
}
})
})
}
} }
// checkChange(e, info) {
// this.userIds = e
// this.userName = []
// if (info.checkedNodes && info.checkedNodes.length > 0) {
// info.checkedNodes.forEach(res => {
// if (res.data.props.dataRef.key) {
// this.content.push({
// id: res.data.props.dataRef.key,
// title: res.data.props.dataRef.title
// })
// } else {
// this.content.push({
// id: res.data.props.id,
// title: res.data.props.title
// })
// }
// })
// }
// if (this.content && this.content.length > 0) {
// for (let i = 0; i < this.content.length; i++) {
// for (let j = i + 1; j < this.content.length; j++) {
// if (this.content[i].id == this.content[j].id) {
// this.content.splice(j, 1)
// j--
// }
// }
// }
// this.userIds.forEach(res => {
// this.content.forEach(val => {
// if (res == val.id) {
// this.userName.push(val.title)
// }
// })
// })
// }
// }
} }
} }
</script> </script>
@@ -243,4 +428,11 @@
height: calc(100% - 60px); height: calc(100% - 60px);
overflow: auto; overflow: auto;
} }
.treeWrap {
height: calc(100vh - 240px);
}
.active {
color: #21c9cc;
display: inline-block;
}
</style> </style>
@@ -759,8 +759,8 @@
} }
.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before { .el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before {
background-color: #c0c4cc; background-color: #fff;
border-color: #c0c4cc border-color: #fff;
} }
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner { .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
@@ -927,7 +927,6 @@
.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner { .el-checkbox-button.is-checked:first-child .el-checkbox-button__inner {
border-left-color: #409eff border-left-color: #409eff
} }
.el-checkbox-button.is-disabled .el-checkbox-button__inner { .el-checkbox-button.is-disabled .el-checkbox-button__inner {
color: #c0c4cc; color: #c0c4cc;
cursor: not-allowed; cursor: not-allowed;
@@ -662,12 +662,12 @@
margin-top: 10px; margin-top: 10px;
.content-box-content-botton-text { .content-box-content-botton-text {
width: 118px; max-width: 198px;
height: 32px; height: 32px;
display: inline-block; display: inline-block;
text-align: center; text-align: center;
line-height: 32px; line-height: 32px;
padding: 0 6px; padding: 0 10px;
background: #EFF1F3; background: #EFF1F3;
border-radius: 4px; border-radius: 4px;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -222,7 +222,7 @@
} else if (fileSuffix == '.xlsx' || fileSuffix == '.xls') { } else if (fileSuffix == '.xlsx' || fileSuffix == '.xls') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix) let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadFileUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank') window.open(url, '_blank')
}else if(fileSuffix == '.png' || fileSuffix == '.jpeg' || fileSuffix == '.gif' || fileSuffix == '.jpg'){ } else if (fileSuffix == '.png' || fileSuffix == '.jpeg' || fileSuffix == '.gif' || fileSuffix == '.jpg') {
let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadImgUrl + '/' + fileQuery.id + fileSuffix) let url = window._CONFIG['onlinePreviewDomainURL'] + '?url=' + Base64.encode(this.downLoadImgUrl + '/' + fileQuery.id + fileSuffix)
window.open(url, '_blank') window.open(url, '_blank')
} else { } else {
@@ -494,12 +494,13 @@
margin-top: 10px; margin-top: 10px;
.content-box-content-botton-text { .content-box-content-botton-text {
width: 140px; max-width: 200px;
/*min-width: 120px;*/
height: 32px; height: 32px;
display: inline-block; display: inline-block;
text-align: center; text-align: center;
line-height: 32px; line-height: 32px;
padding: 0 6px; padding: 0 10px;
background: #EFF1F3; background: #EFF1F3;
border-radius: 4px; border-radius: 4px;
text-overflow: ellipsis; text-overflow: ellipsis;
@@ -512,7 +513,7 @@
cursor: pointer; cursor: pointer;
.file-text { .file-text {
width: 90px; width: calc(100% - 30px);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@@ -522,6 +523,7 @@
} }
.icon-text { .icon-text {
width: 24px;
font-size: 16px; font-size: 16px;
overflow: hidden; overflow: hidden;
margin-bottom: 9px; margin-bottom: 9px;