You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
4.8 KiB
179 lines
4.8 KiB
<template>
|
|
<!-- 卷内顺序调整 -->
|
|
<div>
|
|
<el-dialog class="adjust-dialog" :title="titleAdjustment" :close-on-click-modal="false" :modal-append-to-body="false" append-to-body :visible.sync="adjustmentVisible" @opened="opened">
|
|
<div class="setting-dialog">
|
|
<div v-if="isJuannei" class="base-info">
|
|
<p>案卷档号:{{ selections.length !== 0 && selections[0].archive_no }}</p>
|
|
<p>案卷题名:{{ selections.length !== 0 && selections[0].maintitle }}</p>
|
|
</div>
|
|
<i class="drag-tip">提示:请通过拖动鼠标来调整当前顺序</i>
|
|
<el-table
|
|
ref="table"
|
|
:data="sortTableData"
|
|
:tree-props="{children: 'childrens'}"
|
|
class="category-sort"
|
|
style="width: 100%;"
|
|
row-key="id"
|
|
>
|
|
<el-table-column type="index" label="序号" width="55" align="center" />
|
|
<template v-for="(field, index) in queryFields">
|
|
<el-table-column
|
|
v-if="field !== 'id'"
|
|
:key="index"
|
|
:prop="field"
|
|
:label="queryCnFields[index]"
|
|
:width="field === 'archive_no' ? '250px' : '120px'"
|
|
/>
|
|
</template>
|
|
</el-table>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button @click="adjustmentVisible = false">取消</el-button>
|
|
<el-button type="primary" @click.native="handleSort">确定</el-button>
|
|
</div>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { FetchDoArchivesAdjust, FetchArchivesAdjust } from '@/api/collect/collect'
|
|
import Sortable from 'sortablejs'
|
|
export default {
|
|
name: 'FileSeqAdjustment',
|
|
components: { },
|
|
mixins: [],
|
|
props: {
|
|
selectedCategory: {
|
|
type: Object,
|
|
default: function() {
|
|
return {}
|
|
}
|
|
},
|
|
collectLevel: {
|
|
type: Number,
|
|
default: function() {
|
|
return null
|
|
}
|
|
},
|
|
selections: {
|
|
type: Array,
|
|
default: () => []
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
titleAdjustment: '',
|
|
isJuannei: false,
|
|
adjustmentVisible: false,
|
|
categoryB: null,
|
|
sortTableData: [],
|
|
queryCnFields: [],
|
|
queryFields: []
|
|
}
|
|
},
|
|
watch: {
|
|
selectedCategory: function(newValue, oldValue) {
|
|
}
|
|
},
|
|
created() {
|
|
},
|
|
mounted() {
|
|
},
|
|
methods: {
|
|
getDoArchivesAdjust() {
|
|
const archivesIds = this.selections.map(item => item.id)
|
|
let params
|
|
if (this.isJuannei) {
|
|
params = {
|
|
'categoryId': this.selectedCategory.id,
|
|
'archivesIds': archivesIds,
|
|
'categoryLevel': 3
|
|
}
|
|
} else {
|
|
params = {
|
|
'categoryId': this.selectedCategory.id,
|
|
'archivesIds': archivesIds,
|
|
'categoryLevel': this.collectLevel
|
|
}
|
|
}
|
|
FetchDoArchivesAdjust(params).then((res) => {
|
|
console.log(res)
|
|
this.categoryB = res.category.id
|
|
this.sortTableData = res.list
|
|
this.queryCnFields = res.queryCnFields
|
|
this.queryFields = res.queryFields
|
|
}).catch(err => {
|
|
console.log(err)
|
|
})
|
|
},
|
|
// 行拖拽
|
|
rowDrop(className, targetName) {
|
|
const tbody = document.querySelector('.' + className + ' .el-table__body-wrapper tbody')
|
|
const that = this
|
|
Sortable.create(tbody, {
|
|
draggable: '.el-table__row',
|
|
onEnd({ newIndex, oldIndex }) {
|
|
if (newIndex === oldIndex) return
|
|
that[targetName].splice(newIndex, 0, that[targetName].splice(oldIndex, 1)[0])
|
|
}
|
|
})
|
|
},
|
|
opened() {
|
|
this.rowDrop('category-sort', 'sortTableData')
|
|
},
|
|
handleSort() {
|
|
const archivesIds = []
|
|
const sequences = []
|
|
this.sortTableData.map((value, index) => {
|
|
archivesIds.push(value.id)
|
|
sequences.push(index + 1)
|
|
})
|
|
const params = {
|
|
'categoryId': this.categoryB,
|
|
'archivesIds': archivesIds,
|
|
'sequences': sequences
|
|
}
|
|
console.log(params)
|
|
FetchArchivesAdjust(params).then((res) => {
|
|
if (res !== 500) {
|
|
this.$message({
|
|
message: '保存成功',
|
|
type: 'success',
|
|
duration: 2500
|
|
})
|
|
this.adjustmentVisible = false
|
|
this.$emit('close-dialog')
|
|
} else {
|
|
this.$message({
|
|
message: '调整顺序失败',
|
|
type: 'error',
|
|
duration: 2500
|
|
})
|
|
}
|
|
})
|
|
}
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang='scss' scoped>
|
|
.adjust-dialog{
|
|
::v-deep .el-dialog{
|
|
width: 815px;
|
|
.el-dialog__body{
|
|
padding: 16px 0 30px 0;
|
|
}
|
|
}
|
|
}
|
|
.base-info{
|
|
display: flex;
|
|
justify-content: space-between;
|
|
color: #0c0e1e;
|
|
padding: 0 20px 30px 20px;
|
|
p{
|
|
flex: 1;
|
|
}
|
|
}
|
|
</style>
|