<template>
|
<GlobalWindow
|
:title="title"
|
width="60%"
|
:visible.sync="visible"
|
@confirm="confirm"
|
>
|
<div class="Analysis">
|
<span>请根据使用习惯自定义常用功能,支持拖动排</span>
|
<draggable v-model="filterList" chosenClass="chosen" forceFallback="true" group="people" animation="1000">
|
<transition-group class="dra">
|
<div class="list" v-for="item in filterList" :key="item.path || item.id">
|
<div class="list_checkbox">
|
<el-checkbox v-model="item.checked"> </el-checkbox>
|
</div>
|
<img :src="item.icoPath" />
|
<div class="list_title">{{ item.name }}</div>
|
</div>
|
</transition-group>
|
</draggable>
|
</div>
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import BaseOpera from '@/components/base/BaseOpera'
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import { updMyYwQuickModel, getDefaultYwQuickList, getYwQuickList } from '@/api/ywWorkDesk'
|
import draggable from 'vuedraggable'
|
export default {
|
name: 'commonFunctions',
|
extends: BaseOpera,
|
components: { GlobalWindow, draggable },
|
data () {
|
return {
|
filterList: []
|
}
|
},
|
methods: {
|
open (title) {
|
this.title = title
|
Promise.all([getDefaultYwQuickList(), getYwQuickList()])
|
.then(([allList, myList]) => {
|
const selectedPaths = (myList || []).map(item => item.path)
|
const pathOrder = new Map(selectedPaths.map((path, index) => [path, index]))
|
const selected = []
|
const unselected = []
|
;(allList || []).forEach(item => {
|
const entry = { ...item, checked: selectedPaths.includes(item.path) }
|
if (entry.checked) {
|
selected.push(entry)
|
} else {
|
unselected.push(entry)
|
}
|
})
|
selected.sort((a, b) => (pathOrder.get(a.path) || 0) - (pathOrder.get(b.path) || 0))
|
this.filterList = [...selected, ...unselected]
|
this.visible = true
|
})
|
.catch(e => this.$tip.apiFailed(e))
|
},
|
confirm () {
|
this.isWorking = true
|
let arr = this.filterList.filter(item => item.checked)
|
updMyYwQuickModel(arr.map(item => item.id))
|
.then(() => {
|
this.visible = false
|
this.$tip.apiSuccess('修改成功')
|
this.$emit('success')
|
})
|
.finally(() => {
|
this.isWorking = false
|
})
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
.Analysis {
|
width: 100%;
|
margin-top: 20px;
|
display: flex;
|
flex-direction: column;
|
span {
|
font-weight: 400;
|
font-size: 14px;
|
color: #333333;
|
margin-bottom: 20px;
|
}
|
.dra {
|
display: flex;
|
flex-wrap: wrap;
|
justify-content: space-between;
|
}
|
.list {
|
cursor: pointer;
|
display: flex;
|
align-items: center;
|
width: 24%;
|
height: 80px;
|
background: #FFFFFF;
|
border-radius: 8px;
|
border: 1px solid #DFE2E8;
|
margin-bottom: 10px;
|
padding: 0 20px;
|
box-sizing: border-box;
|
position: relative;
|
.list_checkbox {
|
position: absolute;
|
right: 10px;
|
top: 10px;
|
}
|
img {
|
width: 40px;
|
height: 40px;
|
user-select: none;
|
margin-right: 10px;
|
}
|
.list_title {
|
width: 130px;
|
font-size: 11px;
|
user-select: none;
|
}
|
}
|
}
|
</style>
|