Browse Source
* Delete third party import license * Resource authorization add file resource and UDF resource tabpull/2/head
break60
5 years ago
committed by
qiaozhanwei
4 changed files with 289 additions and 5 deletions
@ -0,0 +1,255 @@ |
|||||||
|
/* |
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one or more |
||||||
|
* contributor license agreements. See the NOTICE file distributed with |
||||||
|
* this work for additional information regarding copyright ownership. |
||||||
|
* The ASF licenses this file to You under the Apache License, Version 2.0 |
||||||
|
* (the "License"); you may not use this file except in compliance with |
||||||
|
* the License. You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
<template> |
||||||
|
<m-popup :ok-text="$t('Submit')" :nameText="type.name + $t('Authorize')" @ok="_ok" ref="popup"> |
||||||
|
<template slot="content"> |
||||||
|
<div class="clearfix transfer-model"> |
||||||
|
<div> |
||||||
|
<x-button-group v-model="checkedValue" size="small"> |
||||||
|
<x-button type="ghost" value="fileResource" @click="_ckFile">{{$t('File resources')}}</x-button> |
||||||
|
<x-button type="ghost" value="udfResource" @click="_ckUDf">{{$t('UDF resources')}}</x-button> |
||||||
|
</x-button-group> |
||||||
|
</div> |
||||||
|
<div class="select-list-box"> |
||||||
|
<div class="tf-header"> |
||||||
|
<div class="title">{{type.name}}{{$t('List')}}</div> |
||||||
|
<div class="count">({{cacheSourceList.length}})</div> |
||||||
|
</div> |
||||||
|
<!--<div class="tf-search"> |
||||||
|
<x-input v-model="searchSourceVal" |
||||||
|
@on-enterkey="_sourceQuery" |
||||||
|
@on-click-icon="_sourceQuery" |
||||||
|
size="small" |
||||||
|
placeholder="Please enter keyword" |
||||||
|
type="text" |
||||||
|
style="width:202px;"> |
||||||
|
<i slot="suffix" class="ans-icon-search"></i> |
||||||
|
</x-input> |
||||||
|
</div>--> |
||||||
|
<div class="scrollbar tf-content"> |
||||||
|
<ul> |
||||||
|
<li v-for="(item,$index) in sourceList" :key="item.id" @click="_ckSource(item)"> |
||||||
|
<span>{{item.name}}</span> |
||||||
|
<a href="javascript:"></a> |
||||||
|
</li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
<div class="select-oper-box"> </div> |
||||||
|
<div class="select-list-box"> |
||||||
|
<div class="tf-header"> |
||||||
|
<div class="title">{{$t('Selected')}}{{type.name}}</div> |
||||||
|
<div class="count">({{cacheTargetList.length}})</div> |
||||||
|
</div> |
||||||
|
<!--<div class="tf-search"> |
||||||
|
<x-input v-model="searchTargetVal" |
||||||
|
@on-enterkey="_targetQuery" |
||||||
|
@on-click-icon="_targetQuery" |
||||||
|
size="small" |
||||||
|
placeholder="Please enter keyword" |
||||||
|
type="text" |
||||||
|
style="width:202px;"> |
||||||
|
<i slot="suffix" class="ans-icon-search"></i> |
||||||
|
</x-input> |
||||||
|
</div>--> |
||||||
|
<div class="scrollbar tf-content"> |
||||||
|
<ul> |
||||||
|
<li v-for="(item,$index) in targetList" :key="item.id" @click="_ckTarget(item)"><span>{{item.name}}</span></li> |
||||||
|
</ul> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</div> |
||||||
|
</template> |
||||||
|
</m-popup> |
||||||
|
</template> |
||||||
|
<script> |
||||||
|
import _ from 'lodash' |
||||||
|
import mPopup from '@/module/components/popup/popup' |
||||||
|
import mListBoxF from '@/module/components/listBoxF/listBoxF' |
||||||
|
|
||||||
|
export default { |
||||||
|
name: 'transfer', |
||||||
|
data () { |
||||||
|
return { |
||||||
|
checkedValue: 'fileResource', |
||||||
|
sourceList: this.fileSourceList, |
||||||
|
targetList: this.fileTargetList, |
||||||
|
cacheSourceList: this.fileSourceList, |
||||||
|
cacheTargetList: this.fileTargetList, |
||||||
|
|
||||||
|
fileSource: this.fileSourceList, |
||||||
|
fileTarget: this.fileTargetList, |
||||||
|
udfSource: this.udfSourceList, |
||||||
|
udfTarget: this.udfTargetList, |
||||||
|
searchSourceVal: '', |
||||||
|
searchTargetVal: '' |
||||||
|
} |
||||||
|
}, |
||||||
|
props: { |
||||||
|
type: Object, |
||||||
|
fileSourceList: Array, |
||||||
|
udfSourceList: Array, |
||||||
|
fileTargetList: Array, |
||||||
|
udfTargetList: Array, |
||||||
|
}, |
||||||
|
methods: { |
||||||
|
_ok () { |
||||||
|
this.$refs['popup'].spinnerLoading = true |
||||||
|
setTimeout(() => { |
||||||
|
this.$refs['popup'].spinnerLoading = false |
||||||
|
this.$emit('onUpdate', _.map(this.fileTarget.concat(this.udfTarget), v => v.id).join(',')) |
||||||
|
}, 800) |
||||||
|
}, |
||||||
|
_ckFile() { |
||||||
|
this.checkedValue = "fileResource" |
||||||
|
this.sourceList = this.fileSource |
||||||
|
this.targetList = this.fileTarget |
||||||
|
this.cacheSourceList = this.fileSource |
||||||
|
this.cacheTargetList = this.fileTarget |
||||||
|
}, |
||||||
|
_ckUDf() { |
||||||
|
this.checkedValue = "udfResource" |
||||||
|
this.sourceList = this.udfSource |
||||||
|
this.targetList = this.udfTarget |
||||||
|
this.cacheSourceList = this.udfSource |
||||||
|
this.cacheTargetList = this.udfTarget |
||||||
|
}, |
||||||
|
_sourceQuery () { |
||||||
|
this.sourceList = this.sourceList.filter(v => v.name.indexOf(this.searchSourceVal) > -1) |
||||||
|
}, |
||||||
|
_targetQuery () { |
||||||
|
this.targetList = this.targetList.filter(v => v.name.indexOf(this.searchTargetVal) > -1) |
||||||
|
}, |
||||||
|
_ckSource (item) { |
||||||
|
this.targetList = this.cacheTargetList |
||||||
|
this.targetList.unshift(item) |
||||||
|
this.searchTargetVal = '' |
||||||
|
let i1 = _.findIndex(this.sourceList, v => item.id === v.id) |
||||||
|
this.sourceList.splice(i1, 1) |
||||||
|
let i2 = _.findIndex(this.cacheSourceList, v => item.id === v.id) |
||||||
|
if (i2 !== -1) { |
||||||
|
this.cacheSourceList.splice(i2, 1) |
||||||
|
} |
||||||
|
if(this.checkedValue == "fileResource") { |
||||||
|
this.fileTarget = this.targetList |
||||||
|
this.fileSource = this.sourceList |
||||||
|
} else { |
||||||
|
this.udfTarget = this.targetList |
||||||
|
this.udfSource = this.sourceList |
||||||
|
} |
||||||
|
}, |
||||||
|
_ckTarget (item) { |
||||||
|
this.sourceList = this.cacheSourceList |
||||||
|
this.sourceList.unshift(item) |
||||||
|
this.searchSourceVal = '' |
||||||
|
let i1 = _.findIndex(this.targetList, v => item.id === v.id) |
||||||
|
this.targetList.splice(i1, 1) |
||||||
|
let i2 = _.findIndex(this.cacheTargetList, v => item.id === v.id) |
||||||
|
if (i2 !== -1) { |
||||||
|
this.cacheTargetList.splice(i2, 1) |
||||||
|
} |
||||||
|
if(this.checkedValue == "fileResource") { |
||||||
|
this.fileSource = this.sourceList |
||||||
|
this.fileTarget = this.targetList |
||||||
|
} else { |
||||||
|
this.udfSource = this.sourceList |
||||||
|
this.udfTarget = this.targetList |
||||||
|
} |
||||||
|
} |
||||||
|
}, |
||||||
|
watch: { |
||||||
|
searchSourceVal (val) { |
||||||
|
if (!val) { |
||||||
|
this.sourceList = _.cloneDeep(this.cacheSourceList) |
||||||
|
return |
||||||
|
} |
||||||
|
this._sourceQuery() |
||||||
|
}, |
||||||
|
searchTargetVal (val) { |
||||||
|
if (!val) { |
||||||
|
this.targetList = _.cloneDeep(this.cacheTargetList) |
||||||
|
return |
||||||
|
} |
||||||
|
this._targetQuery() |
||||||
|
} |
||||||
|
}, |
||||||
|
components: { mPopup, mListBoxF } |
||||||
|
} |
||||||
|
</script> |
||||||
|
|
||||||
|
<style lang="scss" rel="stylesheet/scss"> |
||||||
|
.transfer-model { |
||||||
|
padding: 0 20px; |
||||||
|
.select-list-box { |
||||||
|
width: 220px; |
||||||
|
float: left; |
||||||
|
border: 1px solid #dcdee2; |
||||||
|
border-radius: 3px; |
||||||
|
.tf-header { |
||||||
|
height: 36px; |
||||||
|
line-height: 36px; |
||||||
|
background: #f9fafc; |
||||||
|
position: relative; |
||||||
|
border-bottom: 1px solid #dcdee2; |
||||||
|
margin-bottom: 8px; |
||||||
|
.title { |
||||||
|
position: absolute; |
||||||
|
left: 8px; |
||||||
|
top: 0; |
||||||
|
} |
||||||
|
.count { |
||||||
|
position: absolute; |
||||||
|
right: 8px; |
||||||
|
top: 0; |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
} |
||||||
|
.tf-search { |
||||||
|
background: #fff; |
||||||
|
padding: 8px; |
||||||
|
.fa-search { |
||||||
|
color: #999; |
||||||
|
} |
||||||
|
} |
||||||
|
.tf-content { |
||||||
|
height: 280px; |
||||||
|
ul { |
||||||
|
li { |
||||||
|
height: 28px; |
||||||
|
line-height: 28px; |
||||||
|
cursor: pointer; |
||||||
|
span { |
||||||
|
padding-left: 10px; |
||||||
|
overflow: hidden; |
||||||
|
text-overflow: ellipsis; |
||||||
|
white-space: nowrap; |
||||||
|
width: 210px; |
||||||
|
display: inline-block; |
||||||
|
} |
||||||
|
&:hover { |
||||||
|
background: #f6faff; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
.select-oper-box { |
||||||
|
width: 20px; |
||||||
|
float: left; |
||||||
|
} |
||||||
|
} |
||||||
|
</style> |
Loading…
Reference in new issue