Compare commits

...

2 Commits

Author SHA1 Message Date
dd31ad21be Merge branch 'LiWenHao'
Some checks are pending
Check / lint (push) Waiting to run
Check / typecheck (push) Waiting to run
Check / build (build, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build, 18.x, windows-latest) (push) Waiting to run
Check / build (build:app, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:app, 18.x, windows-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, ubuntu-latest) (push) Waiting to run
Check / build (build:mp-weixin, 18.x, windows-latest) (push) Waiting to run
2025-04-24 09:49:20 +08:00
c139828e71 通讯录 2025-04-24 09:48:52 +08:00
4 changed files with 877 additions and 945 deletions

View File

@ -1,6 +1,7 @@
<template>
<tm-navbar
:hideBack="props.hideBack"
:hideHome="props.hideHome"
:title="props.title"
:shadow="props.shadowNum"
:fontSize="34"
@ -37,6 +38,10 @@ const props = defineProps({
type: Number,
default: 1,
},
hideHome: {
type: Boolean,
default: false,
},
})
</script>

View File

@ -90,6 +90,12 @@ export function createApp() {
window.updateUserInfo = () => {
useUserStore().loadSetting()
}
// 通讯录跳转
window.handleContacts = () => {
uni.navigateTo({
url: '/pages/chooseByDeps/index?chooseMode=3&type=true'
});
};
//处理OA、墨册强制刷新时聊天同步强制刷新
window.doLocationRefresh = () => {

View File

@ -3,58 +3,47 @@
<zPaging ref="zPaging" :show-scrollbar="false">
<template #top>
<div :class="state.chooseMode === 3 ? 'top_bg' : ''">
<customNavbar
<!-- <customNavbar
:class="state.chooseMode === 3 ? 'index_top_navbar' : ''"
:title="pageTitle"
></customNavbar>
></customNavbar> -->
<customNavbar :class="state.chooseMode === 3 ? 'index_top_navbar' : ''" :title="pageTitle" :hideHome="navshow"
:hideBack="navshow">
<template #left>
<tm-icon @click="goWebHome" v-if="navshow" name="tmicon-angle-left"
style="padding-left: 30rpx;"></tm-icon>
</template>
</customNavbar>
<div class="pl-[32rpx] pr-[32rpx] pt-[32rpx] pb-[32rpx]">
<customInput
:searchText="searchVal"
@inputSearchText="inputSearchText"
></customInput>
<customInput :searchText="searchVal" @inputSearchText="inputSearchText"></customInput>
</div>
</div>
</template>
<div class="choose-deps">
<div class="w-full pl-[32rpx] pr-[32rpx]">
<div
v-if="crumbs.length"
<div v-if="crumbs.length"
class="w-full overflow-x-auto mt-[22rpx] leading-[48rpx] text-[#2F2F2F] flex items-center no-scrollbar"
ref="crumbsContainer"
>
<div
v-for="(item, index) in crumbs"
class="flex items-center text-[28rpx] leading-[48rpx] whitespace-nowrap"
:class="[
ref="crumbsContainer">
<div v-for="(item, index) in crumbs"
class="flex items-center text-[28rpx] leading-[48rpx] whitespace-nowrap" :class="[
index === crumbsIndex ? 'text-[#747474]' : 'text-[#46299D]',
index === 0 ? '' : 'ml-[12rpx]',
]"
@click="handleCrumbsClick(index)"
>
]" @click="handleCrumbsClick(index)">
<div>{{ item.name }}</div>
<div
v-if="index !== crumbs.length - 1"
class="ml-[20rpx] flex items-center mb-[2rpx]"
>
<tm-icon
name="tmicon-angle-right"
:font-size="20"
:color="index !== crumbs.length - 1 ? '#7A58DE' : '#C1B4EA'"
></tm-icon>
<div v-if="index !== crumbs.length - 1" class="ml-[20rpx] flex items-center mb-[2rpx]">
<tm-icon name="tmicon-angle-right" :font-size="20"
:color="index !== crumbs.length - 1 ? '#7A58DE' : '#C1B4EA'"></tm-icon>
</div>
</div>
</div>
<div
v-if="
<div v-if="
(state.chooseMode === 1 || state.chooseMode === 2) &&
((currentCrumbs?.sons?.length > 0 &&
((state.chooseMode === 2 && !searchVal) ||
state.chooseMode !== 2)) ||
currentMembers?.length > 0)
"
class="pl-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center"
@click="() => allCheck(allCheckStatus)"
>
" class="pl-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center"
@click="() => allCheck(allCheckStatus)">
<div class="mr-[20rpx]">
<checkBox @change="(val) => allCheck(allCheckStatus)" :modelValue="allCheckStatus"></checkBox>
</div>
@ -62,13 +51,10 @@
{{ $t('radio.btn.selectAll') }}
</div>
</div>
<div
v-if="
<div v-if="
currentCrumbs?.sons?.length > 0 &&
((state.chooseMode === 2 && !searchVal) || state.chooseMode !== 2)
"
v-for="item in currentCrumbs?.sons"
@click="
" v-for="item in currentCrumbs?.sons" @click="
state.chooseMode === 1 || state.chooseMode === 2
? checkItemChange(
item,
@ -79,19 +65,11 @@
: 'checked',
)
: ''
"
class="pl-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center"
>
" class="pl-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center">
<div class="w-full flex items-center justify-between">
<div class="flex items-center">
<div
class="mr-[20rpx]"
v-if="state.chooseMode === 1 || state.chooseMode === 2"
>
<checkBox
v-model="item.checkStatus"
@change="(val) => checkItemChange(item, val)"
></checkBox>
<div class="mr-[20rpx]" v-if="state.chooseMode === 1 || state.chooseMode === 2">
<checkBox v-model="item.checkStatus" @change="(val) => checkItemChange(item, val)"></checkBox>
</div>
<div class="font-medium text-[28rpx] leading-[40rpx]">
<span>{{ item.name }}</span>
@ -100,63 +78,38 @@
</span>
</div>
</div>
<div
v-if="
<div v-if="
(item.sons?.length && state.chooseMode === 1) ||
((state.chooseMode === 2 || state.chooseMode === 3) &&
getDepTotalMembers(item) > 0)
"
class="flex items-center mr-[32rpx]"
>
<div
class="vDivider mr-[32rpx]"
v-if="state.chooseMode === 1"
></div>
<div
v-if="state.chooseMode === 1"
@click.stop="checkCurrentItem(item)"
class="flex items-center mr-[32rpx]"
:class="{
" class="flex items-center mr-[32rpx]">
<div class="vDivider mr-[32rpx]" v-if="state.chooseMode === 1"></div>
<div v-if="state.chooseMode === 1" @click.stop="checkCurrentItem(item)"
class="flex items-center mr-[32rpx]" :class="{
'opacity-50 cursor-not-allowed':
item.checkStatus === 'checked',
}"
>
}">
<div class="mr-[20rpx]">
<checkBox
:modelValue="
<checkBox :modelValue="
item.currentChecked ? 'checked' : 'noChecked'
"
@change="() => checkCurrentItem(item)"
></checkBox>
" @change="() => checkCurrentItem(item)"></checkBox>
</div>
<div
class="text-[28rpx] leading-[40rpx] font-medium text-[#46299D]"
>
<div class="text-[28rpx] leading-[40rpx] font-medium text-[#46299D]">
{{ $t('choose.deps.current') }}
</div>
</div>
<div class="vDivider mr-[32rpx]"></div>
<div
@click.stop="() => toNextLevel(item)"
class="flex items-center"
>
<div @click.stop="() => toNextLevel(item)" class="flex items-center">
<div class="mr-[12rpx]">
<tm-image
:width="26"
:height="26"
:src="
<tm-image :width="26" :height="26" :src="
item.checkStatus !== 'checked' ? downDep : downDepDis
"
></tm-image>
"></tm-image>
</div>
<div
class="text-[28rpx] leading-[40rpx] font-medium"
:class="
<div class="text-[28rpx] leading-[40rpx] font-medium" :class="
item.checkStatus !== 'checked'
? 'text-[#46299D]'
: 'text-[#C1B4EA]'
"
>
">
{{ $t('choose.deps.nextLevel') }}
</div>
</div>
@ -164,13 +117,10 @@
</div>
</div>
<div
v-if="
<div v-if="
currentMembers.length &&
(state.chooseMode === 2 || state.chooseMode === 3)
"
v-for="item in currentMembers"
@click="
" v-for="item in currentMembers" @click="
state.chooseMode === 1 || state.chooseMode === 2
? checkMember(
item,
@ -180,68 +130,39 @@
: 'checked',
)
: toUserDetail(item)
"
class="pl-[32rpx] pr-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center"
>
" class="pl-[32rpx] pr-[32rpx] bg-[#FFFFFF] mt-[20rpx] h-[110rpx] flex items-center">
<div class="w-full flex items-center justify-between">
<div class="w-full flex items-center">
<div
class="mr-[20rpx]"
v-if="state.chooseMode === 1 || state.chooseMode === 2"
>
<checkBox
:disabled="isPreSelectedMember(item)"
:modelValue="
<div class="mr-[20rpx]" v-if="state.chooseMode === 1 || state.chooseMode === 2">
<checkBox :disabled="isPreSelectedMember(item)" :modelValue="
membersCheckedKeys.filter((v) => v.ID === item.ID)
.length > 0
? 'checked'
: 'noChecked'
"
@change="(val) => checkMember(item, val)"
></checkBox>
" @change="(val) => checkMember(item, val)"></checkBox>
</div>
<div class="w-full flex items-center">
<div
class="userAvatar flex items-center justify-center"
style="flex-shrink: 0;"
>
<div class="userAvatar flex items-center justify-center" style="flex-shrink: 0;">
{{ item.nickName.slice(-2) }}
</div>
<div
class="ml-[20rpx] flex flex-col justify-center w-[112rpx]"
style="word-break: break-all; flex-shrink: 0;"
>
<div class="ml-[20rpx] flex flex-col justify-center w-[112rpx]"
style="word-break: break-all; flex-shrink: 0;">
<div class="text-[28rpx] font-medium leading-[40rpx]">
{{ item.nickName }}
</div>
<div
class="text-[20rpx] text-[#747474] leading-[28rpx] font-regular"
>
<div class="text-[20rpx] text-[#747474] leading-[28rpx] font-regular">
{{ item.jobNum }}
</div>
</div>
<tm-popover
position="tc"
style="max-width: calc(100% - 64rpx - 112rpx - 20rpx);"
>
<div
class="max-w-full ml-[6rpx] flex max-h-[68rpx] flex-wrap line-clamp-2"
>
<div
v-for="post in item.positions"
class="postTag truncate mb-[4rpx] ml-[14rpx] max-w-[164rpx]"
>
<tm-popover position="tc" style="max-width: calc(100% - 64rpx - 112rpx - 20rpx);">
<div class="max-w-full ml-[6rpx] flex max-h-[68rpx] flex-wrap line-clamp-2">
<div v-for="post in item.positions" class="postTag truncate mb-[4rpx] ml-[14rpx] max-w-[164rpx]">
{{ post.name }}
</div>
</div>
<template v-slot:label>
<div
class="max-h-[250rpx] overflow-y-auto pt-[10rpx] pl-[18rpx] pr-[18rpx] pb-[12rpx]"
>
<div
v-for="post in item.positions"
class="postTag truncate mb-[10rpx]"
>
<div class="max-h-[250rpx] overflow-y-auto pt-[10rpx] pl-[18rpx] pr-[18rpx] pb-[12rpx]">
<div v-for="post in item.positions" class="postTag truncate mb-[10rpx]">
{{ post.name }}
</div>
</div>
@ -254,15 +175,11 @@
</div>
</div>
<template #bottom v-if="state.chooseMode === 1 || state.chooseMode === 2">
<div
class="h-[162rpx] pl-[32rpx] pr-[32rpx] bg-[#FFFFFF] confirm-btn-area"
>
<div class="h-[162rpx] pl-[32rpx] pr-[32rpx] bg-[#FFFFFF] confirm-btn-area">
<div class="mt-[2rpx] flex justify-between">
<div class="flex flex-col mt-[32rpx]">
<div
@click="openDrawer"
class="flex items-center text-[28rpx] leading-[40rpx] text-[#000000] font-medium"
>
<div @click="openDrawer"
class="flex items-center text-[28rpx] leading-[40rpx] text-[#000000] font-medium">
<div>
<span v-if="state.chooseMode === 1">
{{ $t('statistics.selected.deps') }}
@ -280,64 +197,38 @@
</span>
</div>
<div class="ml-[28rpx]">
<tm-icon
:fontSize="24"
color="#46299D"
name="tmicon-angle-up"
></tm-icon>
<tm-icon :fontSize="24" color="#46299D" name="tmicon-angle-up"></tm-icon>
</div>
</div>
<div
class="text-[24rpx] leading-[34rpx] text-[#7A58DE] w-[280rpx] truncate"
>
<div class="text-[24rpx] leading-[34rpx] text-[#7A58DE] w-[280rpx] truncate">
<span v-if="state.chooseMode === 1">
{{ allCheckedList.map((v) => v.name).toString() }}
</span>
<span
v-if="state.chooseMode === 2"
v-for="item in allCheckedList"
>
<span v-if="state.chooseMode === 2" v-for="item in allCheckedList">
<span v-if="item.showInPopup">
{{ item.name }}({{ getDepTotalMembers(item) }})
</span>
</span>
<span
v-if="state.chooseMode === 2"
v-for="(item, index) in membersCheckedKeys"
>
<span v-if="state.chooseMode === 2" v-for="(item, index) in membersCheckedKeys">
{{ item.nickName }}
{{ index !== membersCheckedKeys.length - 1 ? ',' : '' }}
</span>
</div>
</div>
<div class="btnBox">
<customBtn
:btnText="$t('ok')"
@clickBtn="handleConfirm"
:disabled="
<customBtn :btnText="$t('ok')" @clickBtn="handleConfirm" :disabled="
state.chooseMode === 1
? !allCheckedList.length
: state.chooseMode === 2
? !allCheckedList.length && !membersCheckedKeys.length
: true
"
></customBtn>
"></customBtn>
</div>
</div>
</div>
<tm-drawer
placement="bottom"
v-model:show="showWin"
:height="800"
:hideHeader="true"
:round="5"
>
<div
class="flex flex-col w-full h-full pt-[36rpx] pl-[32rpx] pr-[32rpx] leading-[60rpx]"
>
<div
class="text-[32rpx] font-medium leading-[44rpx] flex items-center justify-between"
>
<tm-drawer placement="bottom" v-model:show="showWin" :height="800" :hideHeader="true" :round="5">
<div class="flex flex-col w-full h-full pt-[36rpx] pl-[32rpx] pr-[32rpx] leading-[60rpx]">
<div class="text-[32rpx] font-medium leading-[44rpx] flex items-center justify-between">
<div class="flex items-center ml-[10rpx]">
<div>
<span v-if="state.chooseMode === 1">
@ -356,30 +247,19 @@
</span>
</div>
</div>
<div
class="text-[#7A58DE] mr-[10rpx]"
@click="() => (showWin = false)"
>
<div class="text-[#7A58DE] mr-[10rpx]" @click="() => (showWin = false)">
{{ $t('ok') }}
</div>
</div>
<scroll-view
scroll-y
class="h-[690rpx] mt-[30rpx] scroll-view-style"
>
<scroll-view scroll-y class="h-[690rpx] mt-[30rpx] scroll-view-style">
<div class="flex-1 pb-[20rpx]">
<div
v-for="(item, index) in allCheckedList"
class="flex flex-col"
>
<div v-for="(item, index) in allCheckedList" class="flex flex-col">
<div v-if="index === 0" class="divider"></div>
<div
v-if="
<div v-if="
(item.showInPopup && state.chooseMode === 2) ||
state.chooseMode !== 2
"
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]"
>
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]">
<div class="text-[28rpx] ml-[10rpx]">
<span>{{ item.name }}</span>
<span v-if="state.chooseMode === 2">
@ -387,56 +267,35 @@
</span>
</div>
<div class="diyBtn">
<customBtn
:plain="true"
:btnText="$t('chatSettings.btn.removeAdmin')"
@clickBtn="deleteNode(item)"
></customBtn>
<customBtn :plain="true" :btnText="$t('chatSettings.btn.removeAdmin')"
@clickBtn="deleteNode(item)"></customBtn>
</div>
</div>
<div
class="divider"
v-if="
<div class="divider" v-if="
(item.showInPopup && state.chooseMode === 2) ||
state.chooseMode !== 2
"
></div>
"></div>
</div>
<div
v-for="(item, index) in membersCheckedKeys"
class="flex flex-col"
>
<div
v-if="
<div v-for="(item, index) in membersCheckedKeys" class="flex flex-col">
<div v-if="
index === 0 &&
allCheckedList.length == 0 &&
state.chooseMode === 2
"
class="divider"
></div>
<div
v-if="state.chooseMode === 2"
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]"
>
" class="divider"></div>
<div v-if="state.chooseMode === 2"
class="flex items-center justify-between mt-[36rpx] font-medium text-[#000000] leading-[40rpx] mb-[34rpx]">
<div class="text-[28rpx] ml-[10rpx] flex">
<div>{{ item.nickName }}({{ item.jobNum }})</div>
<div
class="ml-[20rpx] flex h-[68rpx] flex-wrap line-clamp-2 max-w-[342rpx]"
>
<div
v-for="post in item.positions"
class="postTag truncate mb-[4rpx] mr-[14rpx] max-w-[164rpx]"
>
<div class="ml-[20rpx] flex h-[68rpx] flex-wrap line-clamp-2 max-w-[342rpx]">
<div v-for="post in item.positions"
class="postTag truncate mb-[4rpx] mr-[14rpx] max-w-[164rpx]">
{{ post.name }}
</div>
</div>
</div>
<div class="diyBtn">
<customBtn
:plain="true"
:btnText="$t('chatSettings.btn.removeAdmin')"
@clickBtn="deleteMember(item)"
></customBtn>
<customBtn :plain="true" :btnText="$t('chatSettings.btn.removeAdmin')"
@clickBtn="deleteMember(item)"></customBtn>
</div>
</div>
<div class="divider" v-if="state.chooseMode === 2"></div>
@ -453,20 +312,45 @@
import customInput from '@/components/custom-input/custom-input.vue'
import customBtn from '@/components/custom-btn/custom-btn.vue'
import zPaging from '@/uni_modules/z-paging/components/z-paging/z-paging.vue'
import { ref, watch, computed, onMounted, nextTick, reactive } from 'vue'
import { onShow, onLoad } from '@dcloudio/uni-app'
import { useChatList } from '@/store/chatList/index.js'
import { useAuth } from '@/store/auth'
import { useTalkStore, useUserStore } from '@/store'
import { useGroupTypeStore } from '@/store/groupType'
import {
ref,
watch,
computed,
onMounted,
nextTick,
reactive
} from 'vue'
import {
onShow,
onLoad
} from '@dcloudio/uni-app'
import {
useChatList
} from '@/store/chatList/index.js'
import {
useAuth
} from '@/store/auth'
import {
useTalkStore,
useUserStore
} from '@/store'
import {
useGroupTypeStore
} from '@/store/groupType'
import downDep from '@/static/image/chatList/downDep.png'
import downDepDis from '@/static/image/chatList/downDepDis.png'
import checkBox from '@/components/checkBox/index.vue'
import lodash from 'lodash'
import { handleSetWebviewStyle } from '@/utils/common'
import {
handleSetWebviewStyle
} from '@/utils/common'
import { useI18n } from 'vue-i18n'
const { t } = useI18n()
import {
useI18n
} from 'vue-i18n'
const {
t
} = useI18n()
const {
groupActiveIndex,
@ -481,7 +365,7 @@ const {
allChooseMembers,
} = useGroupTypeStore()
const userStore = useUserStore()
const navshow = ref(false)
const searchVal = ref('')
const crumbsContainer = ref(null)
const showWin = ref(false)
@ -496,6 +380,9 @@ onLoad((options) => {
if (options.chooseMode) {
state.chooseMode = Number(options.chooseMode)
}
if (options.type) {
navshow.value = true
}
//
if (options.preSelectedMembers) {
@ -509,7 +396,15 @@ onLoad((options) => {
}
}
})
const goWebHome = () => {
uni.navigateBack()
let OAWebView = plus.webview.all()
OAWebView.forEach((webview) => {
if (webview.id === 'webviewId1') {
webview.evalJS(`handleBackHost()`)
}
})
}
//
const isPreSelectedMember = (member) => {
return state.preSelectedMembers.some(
@ -590,6 +485,7 @@ const currentCrumbs = computed(() => {
const buildDepsMap = (departments) => {
const index = new Map()
function traverse(deps) {
for (let dep of deps) {
index.set(`${dep.name}`, dep)
@ -613,11 +509,11 @@ const allCheckStatus = computed(() => {
if (state.chooseMode === 2) {
//
const allDepsChecked =
currentCrumbs?.value?.sons?.length > 0
? currentCrumbs?.value?.sons?.every(
currentCrumbs?.value?.sons?.length > 0 ?
currentCrumbs?.value?.sons?.every(
(son) => son.checkStatus === 'checked',
)
: true
) :
true
//
const selectableMembers = currentMembers.value.filter(
@ -863,8 +759,7 @@ const allCheck = (status) => {
const openDrawer = () => {
showWin.value = true
if (allCheckedList.length > 0) {
}
if (allCheckedList.length > 0) {}
}
// watch(() => depTreeMyList.value, (newValue, oldValue) => {
@ -925,7 +820,9 @@ const init = async () => {
ID: 'all',
name: t('choose.deps.all'),
sons: [...depTreeMyList.value], // 使
staffNum: calculateTotalStaffNum({ sons: depTreeMyList.value }),
staffNum: calculateTotalStaffNum({
sons: depTreeMyList.value
}),
}
depTreeMyList.value = [allNode]
crumbs.value = [allNode]
@ -1019,7 +916,9 @@ const getCurrentMembers = async (depItem) => {
return
}
// 使
let params = { status: 'notactive' }
let params = {
status: 'notactive'
}
if (searchVal.value) {
params = {
fatherDepartmentId: depItem.ID,
@ -1036,14 +935,13 @@ const getCurrentMembers = async (depItem) => {
}
const res = await getDepMembers(params)
if (res.code === 200) {
currentMembers.value = res?.data?.data?.length
? res.data.data.map((v) => {
currentMembers.value = res?.data?.data?.length ?
res.data.data.map((v) => {
return {
...v,
isMember: true,
}
})
: []
}) : []
} else {
currentMembers.value = []
}
@ -1068,8 +966,9 @@ watch(
if (newValue?.ID && (state.chooseMode === 2 || state.chooseMode === 3)) {
getCurrentMembers(newValue)
}
}, {
immediate: true
},
{ immediate: true },
)
const deleteMember = (item) => {
@ -1100,8 +999,7 @@ const totalMembers = computed(() => {
const toUserDetail = (userItem) => {
console.log(userItem)
uni.navigateTo({
url:
'/pages/dialog/dialogDetail/userDetail??erpUserId=' +
url: '/pages/dialog/dialogDetail/userDetail??erpUserId=' +
(userItem.erp_user_id || userItem.ID),
})
}
@ -1111,9 +1009,11 @@ const toUserDetail = (userItem) => {
height: 100%;
display: flex;
}
::v-deep .index_top_navbar .tmicon-angle-left {
color: #fff !important;
}
::v-deep .index_top_navbar .text-weight-b {
color: #fff !important;
}
@ -1122,11 +1022,13 @@ const toUserDetail = (userItem) => {
background: transparent !important;
border: none !important;
}
.top_bg {
background: url('@/static/image/mine/page_top.png') no-repeat;
background-size: cover;
background-position: bottom center;
}
.choose-deps-page {
.choose-deps {
flex: 1;
@ -1146,6 +1048,7 @@ const toUserDetail = (userItem) => {
background-color: #707070;
opacity: 0.1;
}
.vDivider {
width: 1rpx;
height: 48rpx;
@ -1159,6 +1062,7 @@ const toUserDetail = (userItem) => {
border-radius: 50%;
margin-bottom: 40rpx;
}
.groupCard {
height: 272rpx;
width: 100%;
@ -1166,45 +1070,58 @@ const toUserDetail = (userItem) => {
background-position: center;
background-repeat: no-repeat;
border-radius: 12rpx;
&.firstPanel {
background-image: url('@/static/image/chatList/zu6033@2x.png');
}
&.secondPanel {
background-image: url('@/static/image/chatList/zu6031@2x.png');
margin-top: 28rpx;
margin-bottom: 28rpx;
}
&.thirdPanel {
background-image: url('@/static/image/chatList/zu6032@2x.png');
}
&.activePanel {
box-shadow: 0 0 0 3rpx #46299d;
}
}
.btnBox {
margin: 14rpx 0 0;
::v-deep .custom-btn-class {
padding: 18rpx 104rpx !important;
width: unset !important;
}
::v-deep .is-disabled {
background-color: #e6e6e6 !important;
color: #bebebe !important;
}
::v-deep .wd-button__text {
font-size: 28rpx !important;
font-weight: 500 !important;
line-height: 40rpx !important;
}
}
.no-scrollbar {
-ms-overflow-style: none; /* IE and Edge */
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none;
/* IE and Edge */
scrollbar-width: none;
/* Firefox */
}
.no-scrollbar::-webkit-scrollbar {
display: none; /* Chrome, Safari, and Opera */
display: none;
/* Chrome, Safari, and Opera */
}
.diyBtn {
::v-deep .custom-btn-class {
padding: 8rpx 30rpx !important;
@ -1212,12 +1129,14 @@ const toUserDetail = (userItem) => {
min-width: unset !important;
height: unset !important;
}
::v-deep .wd-button__text {
font-size: 24rpx !important;
font-weight: 400 !important;
line-height: 34rpx !important;
color: #191919;
}
::v-deep .custom-btn-class {
background-color: #fff !important;
border: 2rpx solid #d6d6d8 !important;
@ -1231,6 +1150,7 @@ const toUserDetail = (userItem) => {
.scroll-view-style {
-ms-overflow-style: none;
overflow: -moz-scrollbars-none;
::-webkit-scrollbar {
width: 0 !important;
}
@ -1245,6 +1165,7 @@ const toUserDetail = (userItem) => {
font-size: 24rpx;
font-weight: bold;
}
.postTag {
background-color: #eee9f8;
height: 32rpx;

View File

@ -5,7 +5,7 @@ import { userInfoApi } from "@/api/user";
import {ref} from 'vue'
export const useAuth = createGlobalState(() => {
const token = useStorage('token', '', uniStorage)
// const token = ref("79b5c732d96d2b27a48a99dfd4a5566c43aaa5796242e854ebe3ffc198d6876b9628e7b764d9af65ab5dbb2d517ced88170491b74b048c0ba827c0d3741462cb89dc59ed46653a449af837a8262941caba0afc18e7cb819d125e8c04282beb5d4dd454307169f7eb51cd3dbbee20c1a17784f78ad30c3b3a102bd03c3218080beedae501a95c365d360a7a0d682cba2eca94a2915c13f0bdcb42f2eab9458cb4bd89ae6f3200fe4893d64caf1bce02894aab876f94f7825d23be507733468deba21734b6d666b75fd0bee74753fdd6ca5def7ec42cd7dbb47750e61cac6965f34fd71b52be66a472d3ee5b1e4661e59d4489860c2e1d8c178de5b43853ef9be822f00e0903b5c97efaa9ba0d9c76a1a91a2d6d77c5a19c551906a67fbfd3af69bd6a59310b8b300658e9b7248d9dd51a66be399ef412cb7c83bc81abfc15b65b")
// const token = ref("2046c3941ed4959f6d988d3d4a0fe40d4b52f33f3f5fc1001406064554641d9406bb13cacb92939b0ca223c17e2c2f2fe70212ef017dbae8965d5cf86bad48ce4316e605ca187bd9ffd4aa6b56865be4ad4e422701d330b52d60cfe649cd48cf3a21a2a6e9a9cabafff364ee9c311ec634b0afc09db0d3215bedce561e9d50e5a8da6092062e2ebe35f747d77d72a68ad492a4ab218c07887c9cd4867f2c2d28e4ae1fd671144cc20ef0632f9ce067289004d67f6adf41b20d6ef5cdbfb74aadc2d2736ececf07254f1a76552bde4f1161a0fca7bfe32a29685ce1e76366116b81ae2195b3713dbb04285e5ddfd36184fe671c5524d20b4fe74a555db755f8d939b0bc46fb0cb998323d54c9925729d7ca835b7925999a677faa0cbe1cbc67b5203d85317653883aec81d3e71d865b326376bea726cc66d9f7f5a160d43f671c")
const refreshToken = useStorage('refreshToken', '', uniStorage)
const userInfo = useStorage('userInfo', {}, uniStorage)
const leaderList = useStorage('leaderList', [], uniStorage)