Skip to content

Commit 3159e2c

Browse files
ppxbCharles7c
authored andcommitted
chore: change tab pane style
1 parent 576faac commit 3159e2c

File tree

2 files changed

+88
-11
lines changed

2 files changed

+88
-11
lines changed

src/views/user/message/components/MyMessage.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
<template #toolbar-right>
3434
<a-button type="primary" status="danger" :disabled="!selectedKeys.length" :title="!selectedKeys.length ? '请选择' : ''" @click="onDelete">
3535
<template #icon><icon-delete /></template>
36-
<template #default>删除</template>
36+
删除
3737
</a-button>
3838
<a-button type="primary" :disabled="!selectedKeys.length" :title="!selectedKeys.length ? '请选择' : ''" @click="onRead">
39-
<template #default>标记为已读</template>
39+
标记为已读
4040
</a-button>
41-
<a-button type="primary" :disabled="selectedKeys.length" :title="!selectedKeys.length ? '请选择' : ''" @click="onReadAll">
42-
<template #default>全部已读</template>
41+
<a-button type="primary" :disabled="selectedKeys.length > 0" :title="!selectedKeys.length ? '请选择' : ''" @click="onReadAll">
42+
全部已读
4343
</a-button>
4444
</template>
4545
<template #title="{ record }">

src/views/user/message/index.vue

Lines changed: 84 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,91 @@
11
<template>
2-
<GiPageLayout :margin="true" :default-collapsed="false">
2+
<GiPageLayout :margin="true" :default-collapsed="false" :header-style="isDesktop ? { borderBottomWidth: 0 } : { borderBottomWidth: '1px' } ">
33
<template v-if="isDesktop" #left>
4-
<a-tabs v-model:active-key="activeKey" position="left" hide-content size="large" @change="change">
5-
<a-tab-pane v-for="(item) in menuList" :key="item.key" :title="item.name"></a-tab-pane>
4+
<a-tabs v-model:active-key="activeKey" type="rounded" position="left" hide-content size="large" @change="change">
5+
<a-tab-pane v-for="item in tabItems" :key="item.key">
6+
<template #title>
7+
<TabPaneTitle :title="item.title" :count="item.count" />
8+
</template>
9+
</a-tab-pane>
10+
</a-tabs>
11+
</template>
12+
<template #header>
13+
<a-tabs v-if="!isDesktop" v-model:active-key="activeKey" type="rounded" position="top" size="large" @change="change">
14+
<a-tab-pane v-for="item in tabItems" :key="item.key">
15+
<template #title>
16+
<TabPaneTitle :title="item.title" :count="item.count" />
17+
</template>
18+
</a-tab-pane>
619
</a-tabs>
720
</template>
8-
<a-tabs v-if="!isDesktop" v-model:active-key="activeKey" type="card-gutter" position="top" size="large" @change="change">
9-
<a-tab-pane v-for="(item) in menuList" :key="item.key" :title="item.name"></a-tab-pane>
10-
</a-tabs>
1121
<transition name="fade-slide" mode="out-in" appear>
1222
<component :is="menuList.find((item) => item.key === activeKey)?.value"></component>
1323
</transition>
1424
</GiPageLayout>
1525
</template>
1626

17-
<script setup lang="ts">
27+
<script setup lang="tsx">
1828
import { useRoute, useRouter } from 'vue-router'
1929
import MyMessage from './components/MyMessage.vue'
2030
import MyNotice from './components/MyNotice.vue'
2131
import { useDevice } from '@/hooks'
32+
import { type MessageResp, type NoticeResp, listMessage, listNotice } from '@/apis'
2233
2334
defineOptions({ name: 'UserMessage' })
2435
36+
const TabPaneTitle = defineComponent({
37+
props: {
38+
title: { type: String, required: true },
39+
count: { type: Number, default: 0 },
40+
},
41+
setup(props) {
42+
return () => (
43+
<div class="tab-pane-item">
44+
<div>{props.title}</div>
45+
<a-badge count={props.count} max-count={99} />
46+
</div>
47+
)
48+
},
49+
})
50+
2551
const { isDesktop } = useDevice()
2652
53+
const messageList = ref<MessageResp[]>()
54+
const noticeList = ref<NoticeResp[]>()
55+
56+
const tabItems = computed(() => [
57+
{ key: 'msg', title: '我的消息', count: messageList.value?.length ?? 0 },
58+
{ key: 'notice', title: '我的公告' },
59+
])
60+
61+
const messageQueryParam = reactive({
62+
isRead: false,
63+
sort: ['createTime,desc'],
64+
page: 1,
65+
size: 5,
66+
})
67+
68+
const noticeQueryParam = reactive({
69+
sort: ['createTime,desc'],
70+
page: 1,
71+
size: 5,
72+
})
73+
74+
const getMessageData = async () => {
75+
const { data } = await listMessage(messageQueryParam)
76+
messageList.value = data.list.filter((item) => !item.isRead)
77+
}
78+
79+
const getNoticeData = async () => {
80+
const { data } = await listNotice(noticeQueryParam)
81+
noticeList.value = data.list
82+
}
83+
84+
onMounted(() => {
85+
getMessageData()
86+
getNoticeData()
87+
})
88+
2789
const menuList = [
2890
{ name: '我的消息', key: 'msg', value: MyMessage },
2991
{ name: '我的公告', key: 'notice', value: MyNotice },
@@ -48,6 +110,13 @@ const change = (key: string | number) => {
48110
</script>
49111

50112
<style scoped lang="scss">
113+
.tab-pane-item{
114+
display: flex;
115+
justify-content: space-between;
116+
align-items: center;
117+
gap: 8px;
118+
}
119+
51120
:deep(.arco-tabs-nav-vertical.arco-tabs-nav-type-line .arco-tabs-tab) {
52121
margin: 0;
53122
padding: 8px 16px;
@@ -107,4 +176,12 @@ const change = (key: string | number) => {
107176
:deep(.arco-tabs-nav) {
108177
overflow: visible;
109178
}
179+
180+
:deep(.arco-tabs-nav-type-rounded .arco-tabs-tab){
181+
border-radius: 8px;
182+
}
183+
184+
:deep(.arco-tabs-tab-title){
185+
width: 100%;
186+
}
110187
</style>

0 commit comments

Comments
 (0)