168 lines
3.1 KiB
Vue
168 lines
3.1 KiB
Vue
<template>
|
|
<section class="AiTitle" :class="{ 'bottomBorder': isShowBottomBorder, AiTitleSub: isHasSub}">
|
|
<i class="iconfont iconBack_Large" v-if="isShowBack" @click="onBackBtnClick"/>
|
|
<div class="fill">
|
|
<div class="ailist-title">
|
|
<div class="ailist-title__left">
|
|
<h2>{{ title }}</h2>
|
|
<div v-if="isShowIM" class="openIM iconfont iconGroup_IM" @click="openIM"></div>
|
|
</div>
|
|
<div class="ailist-title__right">
|
|
<ai-area
|
|
v-if="isShowArea"
|
|
:instance="instance"
|
|
v-bind="$attrs"
|
|
:value="value"
|
|
v-on="$listeners"
|
|
:areaLevel="areaLevel"
|
|
:hideLevel="hideLevel"
|
|
:valueLevel="valueLevel"
|
|
:disabled="disabled"/>
|
|
<div class="aititle-right__btns">
|
|
<slot name="rightBtn"></slot>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="subtitle" v-if="$scopedSlots.sub">
|
|
<slot name="sub"/>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</template>
|
|
|
|
<script>
|
|
import {mapActions} from "vuex"
|
|
|
|
export default {
|
|
name: 'AiTitle',
|
|
model: {
|
|
prop: 'value',
|
|
event: 'change'
|
|
},
|
|
props: {
|
|
title: {
|
|
type: String,
|
|
required: true
|
|
},
|
|
instance: {
|
|
type: Function
|
|
},
|
|
areaLevel: [String, Number],
|
|
hideLevel: {default: 2},
|
|
valueLevel: [String, Number],
|
|
disabled: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
value: {
|
|
type: String
|
|
},
|
|
isShowIM: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isShowArea: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
openIM: {
|
|
type: Function
|
|
},
|
|
isShowBack: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
isShowBottomBorder: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
classic: Boolean
|
|
},
|
|
|
|
computed: {
|
|
isHasSub() {
|
|
return this.$slots.sub
|
|
}
|
|
},
|
|
|
|
methods: {
|
|
...mapActions(['closePage']),
|
|
onBackBtnClick() {
|
|
this.closePage()
|
|
this.$emit('onBackClick')
|
|
this.$emit('back')
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.AiTitle {
|
|
display: flex;
|
|
|
|
.ailist-title {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
height: 48px;
|
|
|
|
.ailist-title__left {
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
& > i {
|
|
width: auto;
|
|
height: auto;
|
|
margin-right: 8px;
|
|
font-size: 16px;
|
|
}
|
|
|
|
h2 {
|
|
color: #222;
|
|
font-size: 16px;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.openIM {
|
|
margin-left: 8px;
|
|
}
|
|
}
|
|
|
|
.ailist-title__right {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
:deep(.el-button ) {
|
|
margin-left: 8px !important;
|
|
}
|
|
}
|
|
|
|
&.AiTitleSub {
|
|
height: auto;
|
|
padding: 16px 0;
|
|
|
|
.ailist-title {
|
|
height: auto;
|
|
margin-bottom: 3px;
|
|
}
|
|
}
|
|
|
|
&.bottomBorder {
|
|
border-bottom: 1px solid #D8DCE3;
|
|
}
|
|
|
|
.subtitle {
|
|
width: 100%;
|
|
color: #888888;
|
|
font-size: 12px;
|
|
margin-top: 4px;
|
|
}
|
|
|
|
.iconBack_Large {
|
|
line-height: 48px;
|
|
margin-right: 8px;
|
|
}
|
|
}
|
|
</style>
|