Compare commits
No commits in common. "dd31ad21bec81ca2c6c671c00cb6aeb9714a28be" and "b97219565e09012adfaf261eaa76ea92144f39b5" have entirely different histories.
dd31ad21be
...
b97219565e
@ -1,7 +1,6 @@
|
||||
<template>
|
||||
<tm-navbar
|
||||
:hideBack="props.hideBack"
|
||||
:hideHome="props.hideHome"
|
||||
:title="props.title"
|
||||
:shadow="props.shadowNum"
|
||||
:fontSize="34"
|
||||
@ -38,10 +37,6 @@ const props = defineProps({
|
||||
type: Number,
|
||||
default: 1,
|
||||
},
|
||||
hideHome: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
|
@ -90,12 +90,6 @@ export function createApp() {
|
||||
window.updateUserInfo = () => {
|
||||
useUserStore().loadSetting()
|
||||
}
|
||||
// 通讯录跳转
|
||||
window.handleContacts = () => {
|
||||
uni.navigateTo({
|
||||
url: '/pages/chooseByDeps/index?chooseMode=3&type=true'
|
||||
});
|
||||
};
|
||||
|
||||
//处理OA、墨册强制刷新时,聊天同步强制刷新
|
||||
window.doLocationRefresh = () => {
|
||||
|
@ -3,47 +3,58 @@
|
||||
<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 :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>
|
||||
></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>
|
||||
@ -51,10 +62,13 @@
|
||||
{{ $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,
|
||||
@ -65,11 +79,19 @@
|
||||
: '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>
|
||||
@ -78,38 +100,63 @@
|
||||
</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>
|
||||
@ -117,10 +164,13 @@
|
||||
</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,
|
||||
@ -130,39 +180,68 @@
|
||||
: '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>
|
||||
@ -175,11 +254,15 @@
|
||||
</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') }}:
|
||||
@ -197,38 +280,64 @@
|
||||
</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">
|
||||
@ -247,19 +356,30 @@
|
||||
</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">
|
||||
@ -267,35 +387,56 @@
|
||||
</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>
|
||||
@ -312,45 +453,20 @@
|
||||
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,
|
||||
@ -365,7 +481,7 @@
|
||||
allChooseMembers,
|
||||
} = useGroupTypeStore()
|
||||
const userStore = useUserStore()
|
||||
const navshow = ref(false)
|
||||
|
||||
const searchVal = ref('')
|
||||
const crumbsContainer = ref(null)
|
||||
const showWin = ref(false)
|
||||
@ -380,9 +496,6 @@
|
||||
if (options.chooseMode) {
|
||||
state.chooseMode = Number(options.chooseMode)
|
||||
}
|
||||
if (options.type) {
|
||||
navshow.value = true
|
||||
}
|
||||
|
||||
// 如果有预选成员数据,初始化选中状态
|
||||
if (options.preSelectedMembers) {
|
||||
@ -396,15 +509,7 @@
|
||||
}
|
||||
}
|
||||
})
|
||||
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(
|
||||
@ -485,7 +590,6 @@
|
||||
|
||||
const buildDepsMap = (departments) => {
|
||||
const index = new Map()
|
||||
|
||||
function traverse(deps) {
|
||||
for (let dep of deps) {
|
||||
index.set(`${dep.name}`, dep)
|
||||
@ -509,11 +613,11 @@
|
||||
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(
|
||||
@ -759,7 +863,8 @@
|
||||
|
||||
const openDrawer = () => {
|
||||
showWin.value = true
|
||||
if (allCheckedList.length > 0) {}
|
||||
if (allCheckedList.length > 0) {
|
||||
}
|
||||
}
|
||||
|
||||
// watch(() => depTreeMyList.value, (newValue, oldValue) => {
|
||||
@ -820,9 +925,7 @@
|
||||
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]
|
||||
@ -916,9 +1019,7 @@
|
||||
return
|
||||
}
|
||||
// 使用更明确的参数结构
|
||||
let params = {
|
||||
status: 'notactive'
|
||||
}
|
||||
let params = { status: 'notactive' }
|
||||
if (searchVal.value) {
|
||||
params = {
|
||||
fatherDepartmentId: depItem.ID,
|
||||
@ -935,13 +1036,14 @@
|
||||
}
|
||||
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 = []
|
||||
}
|
||||
@ -966,9 +1068,8 @@
|
||||
if (newValue?.ID && (state.chooseMode === 2 || state.chooseMode === 3)) {
|
||||
getCurrentMembers(newValue)
|
||||
}
|
||||
}, {
|
||||
immediate: true
|
||||
},
|
||||
{ immediate: true },
|
||||
)
|
||||
|
||||
const deleteMember = (item) => {
|
||||
@ -999,7 +1100,8 @@
|
||||
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),
|
||||
})
|
||||
}
|
||||
@ -1009,11 +1111,9 @@
|
||||
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;
|
||||
}
|
||||
@ -1022,13 +1122,11 @@
|
||||
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;
|
||||
@ -1048,7 +1146,6 @@
|
||||
background-color: #707070;
|
||||
opacity: 0.1;
|
||||
}
|
||||
|
||||
.vDivider {
|
||||
width: 1rpx;
|
||||
height: 48rpx;
|
||||
@ -1062,7 +1159,6 @@
|
||||
border-radius: 50%;
|
||||
margin-bottom: 40rpx;
|
||||
}
|
||||
|
||||
.groupCard {
|
||||
height: 272rpx;
|
||||
width: 100%;
|
||||
@ -1070,58 +1166,45 @@
|
||||
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;
|
||||
@ -1129,14 +1212,12 @@
|
||||
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;
|
||||
@ -1150,7 +1231,6 @@
|
||||
.scroll-view-style {
|
||||
-ms-overflow-style: none;
|
||||
overflow: -moz-scrollbars-none;
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 0 !important;
|
||||
}
|
||||
@ -1165,7 +1245,6 @@
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.postTag {
|
||||
background-color: #eee9f8;
|
||||
height: 32rpx;
|
||||
|
@ -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("2046c3941ed4959f6d988d3d4a0fe40d4b52f33f3f5fc1001406064554641d9406bb13cacb92939b0ca223c17e2c2f2fe70212ef017dbae8965d5cf86bad48ce4316e605ca187bd9ffd4aa6b56865be4ad4e422701d330b52d60cfe649cd48cf3a21a2a6e9a9cabafff364ee9c311ec634b0afc09db0d3215bedce561e9d50e5a8da6092062e2ebe35f747d77d72a68ad492a4ab218c07887c9cd4867f2c2d28e4ae1fd671144cc20ef0632f9ce067289004d67f6adf41b20d6ef5cdbfb74aadc2d2736ececf07254f1a76552bde4f1161a0fca7bfe32a29685ce1e76366116b81ae2195b3713dbb04285e5ddfd36184fe671c5524d20b4fe74a555db755f8d939b0bc46fb0cb998323d54c9925729d7ca835b7925999a677faa0cbe1cbc67b5203d85317653883aec81d3e71d865b326376bea726cc66d9f7f5a160d43f671c")
|
||||
// const token = ref("79b5c732d96d2b27a48a99dfd4a5566c43aaa5796242e854ebe3ffc198d6876b9628e7b764d9af65ab5dbb2d517ced88170491b74b048c0ba827c0d3741462cb89dc59ed46653a449af837a8262941caba0afc18e7cb819d125e8c04282beb5d4dd454307169f7eb51cd3dbbee20c1a17784f78ad30c3b3a102bd03c3218080beedae501a95c365d360a7a0d682cba2eca94a2915c13f0bdcb42f2eab9458cb4bd89ae6f3200fe4893d64caf1bce02894aab876f94f7825d23be507733468deba21734b6d666b75fd0bee74753fdd6ca5def7ec42cd7dbb47750e61cac6965f34fd71b52be66a472d3ee5b1e4661e59d4489860c2e1d8c178de5b43853ef9be822f00e0903b5c97efaa9ba0d9c76a1a91a2d6d77c5a19c551906a67fbfd3af69bd6a59310b8b300658e9b7248d9dd51a66be399ef412cb7c83bc81abfc15b65b")
|
||||
const refreshToken = useStorage('refreshToken', '', uniStorage)
|
||||
const userInfo = useStorage('userInfo', {}, uniStorage)
|
||||
const leaderList = useStorage('leaderList', [], uniStorage)
|
||||
|
Loading…
Reference in New Issue
Block a user