This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
nezha-nezha-fronted/nezha-fronted/src/components/common/elementSet.vue

186 lines
5.0 KiB
Vue
Raw Normal View History

<template>
<div class="pop-custom" v-clickoutside="esc">
2020-01-17 16:06:35 +08:00
<div class="pop-title">{{$t('overall.select')}}</div>
<div class="pop-box custom-labels">
<el-scrollbar style="height: 100%;">
<!--NotSet 为true不可设置-->
<div
v-for="(item,index) in custom"
:key="index"
class="custom-label"
@click="handler(item,index)"
:id="'element-set-el-'+index"
2020-09-08 11:18:18 +08:00
:class="{'custom-title orange-font':item.type == 'title','custom-label-disabled':!allowedAll&&!item.allowed && (index==0 || index == 1 || item.NotSet)}"
>
2020-09-10 17:00:32 +08:00
<i class="nz-icon nz-icon-check" v-if="!allowedAll&&!item.allowed&&(index==0||index==1||item.visibility=='disabled')"></i>
<i v-else class="nz-icon nz-icon-check" v-show="item.show"></i>
<span>{{item.label}}</span>
</div>
2020-09-08 11:18:18 +08:00
</el-scrollbar>
</div>
<div class="custom-bottom-btns">
2020-10-13 14:30:57 +08:00
<button v-if="isCancel" type="button" @click="batchHandler(false)" class="nz-btn nz-btn-size-small-new nz-btn-style-light-new is-cancel">
2020-02-17 18:20:14 +08:00
<span class="top-tool-btn-txt">{{$t('overall.clear')}}</span>
</button>
2020-10-13 14:30:57 +08:00
<button v-if="!isCancel" type="button" @click="batchHandler(true)" class="nz-btn nz-btn-size-small-new nz-btn-style-light-new">
<span class="top-tool-btn-txt">{{$t('overall.all')}}</span>
</button>
2020-02-17 18:20:14 +08:00
<div>
2020-10-13 14:30:57 +08:00
<button type="button" @click="esc" class="nz-btn nz-btn-size-small-new nz-btn-style-light-new">
2020-02-17 18:20:14 +08:00
<span class="top-tool-btn-txt">{{$t('overall.esc')}}</span>
</button>
2020-10-13 14:30:57 +08:00
<button type="button" @click="save" class="nz-btn nz-btn-size-small-new nz-btn-style-normal-new">
2020-02-17 18:20:14 +08:00
<span class="top-tool-btn-txt">{{$t('overall.save')}}</span>
</button>
</div>
</div>
</div>
</template>
<script>
export default {
props:{
customTableTitle: Array, //自定义的title
originalTableTitle: Array, //原始title
path: String,
allowedAll: {default: false},
},
data() {
return {
custom: [],
};
},
created() {
let localStorageTitle = JSON.parse(localStorage.getItem("nz-tableTitle-" + localStorage.getItem("nz-username") + "-" + this.$route.path));
if (localStorageTitle ){
for (let title of this.originalTableTitle) {
for (let lsTitle of localStorageTitle) {
if (lsTitle.prop === title.prop){
lsTitle.label = title.label;
}
}
}
localStorage.setItem("nz-tableTitle-" + localStorage.getItem("nz-username") + "-" + this.$route.path, JSON.stringify(localStorageTitle))
}
},
watch: {
customTableTitle: {
immediate: true,
deep: true,
handler(n) {
this.custom = JSON.parse(JSON.stringify(n));
},
},
},
methods: {
//悬浮点击空白隐藏
esc() {
this.$emit('close');
},
//全选all true 或者全取消cancel false按钮
batchHandler(state) {
for (let index = 0; index < this.custom.length; index++) {
2020-11-03 17:29:14 +08:00
if(this.custom[index].type != 'title'){
if ((index == 0 || index == 1 || this.custom[index].NotSet)) {
this.custom[index].show = true;
} else {
this.custom[index].show = state;
}
}
}
},
//单选
handler(val, index) {
2020-08-17 11:01:28 +08:00
if (!this.allowedAll&&!val.allowed && (index == 0 || index == 1 || val.NotSet)) {
// this.custom[index].show = true;
} else {
this.custom[index].show = !this.custom[index].show;
}
},
//点击第二个cancel
save() {
this.$emit('update:customTableTitle', this.custom);
localStorage.setItem(
"nz-tableTitle-" + localStorage.getItem("nz-username") + "-" + ((typeof this.path != 'undefined') ? this.path : this.$route.path),
JSON.stringify(this.custom)
);
this.esc();
},
},
computed: {
2020-02-17 18:20:14 +08:00
//点击all是否是全部取消选中true为是
isCancel() {
let isCancel = true;
for (let i = 0; i < this.custom.length; i++) {
2020-11-03 17:29:14 +08:00
if (!this.custom[i].show&&this.custom[i].type != 'title') {
2020-02-17 18:20:14 +08:00
isCancel = false;
break;
}
}
return isCancel;
}
}
};
</script>
<style lang="scss">
.pop-custom {
2020-01-17 16:06:35 +08:00
padding: 0 12px 12px 12px;
border: 1px solid #EBEEF5;
2020-01-17 16:06:35 +08:00
box-shadow: $pop-box-shadow;
position: absolute;
top: 83px;
right: 0;
width: 200px;
color: #606266;
background: #fff;
border-radius: 4px;
2020-05-28 17:32:23 +08:00
z-index: 999999;
}
2020-08-06 11:29:11 +08:00
.pop-custom-explore {
top: 33px;
}
.relative-position .pop-custom {
top: 33px;
}
.custom-labels {
2020-02-17 18:20:14 +08:00
margin-top: 12px;
width: 100%;
height: 300px;
}
.custom-labels i {
color: #04b330;
font-size: 14px;
position: absolute;
left: 5px;
top: 6px;
}
.custom-label {
padding: 2px 0 2px 25px;
position: relative;
cursor: default;
font-size: 14px;
}
2020-09-08 11:18:18 +08:00
.custom-title{
padding: 2px 0 2px 2px;
}
.custom-label-disabled {
cursor: not-allowed;
background: #f1f3f4;
opacity: 0.7;
}
.custom-bottom-btns {
margin-top: 7px;
2020-02-17 18:20:14 +08:00
display: flex;
justify-content: space-between;
align-items: center;
}
.unshow {
display: none;
}
</style>