Commit fbc04905 authored by 罗超's avatar 罗超

完善部分功能

parent 2876044f
......@@ -418,7 +418,7 @@ page {
background-color: #0b40fe !important;
}
.text-grey-8{
color: grey;
color: grey !important;
}
.no-select{
user-select: none!important;
......@@ -533,7 +533,7 @@ page {
line-height: 0;
}
.text-weight-bold{
font-weight: bold;
font-weight: bold !important;
}
.text-weight-bolder{
font-weight: bolder !important;
......@@ -754,7 +754,7 @@ page {
-o-border-radius: 8px !important;
}
.el-button--info{
color: #000 !important;
color: #333 !important;
background-color: #e8eaec !important;
border-color: #e8eaec !important;
}
......@@ -763,6 +763,11 @@ page {
background-color: #d9dcdf !important;
border-color: #d9dcdf !important;
}
.el-button--info.is-disabled,
.el-button--info.is-disabled:hover{
color: grey !important;
}
.no-border .el-tabs__nav-wrap::after{
display: none!important;
}
......
......@@ -13,39 +13,33 @@
></el-avatar>
<template #dropdown>
<div class="MarketfigurePopover shrink">
<div class="row">
<!-- <div class="MarketfigureMin pointer shrink">
<img class="reactive" src="../../assets/img/figure.png" />
</div> -->
<div class="row items-center">
<el-avatar
:size="40"
:size="44"
shape="square"
:src="userInfo.photo"
style="background-color: #e6ddf5; color: #7b35ef"
class="q-mr-lg cusor-pointer shrink"
></el-avatar>
<div>
<div class="row items-center MarketfigureName">
<span>{{ userInfo.nickname }}</span>
<img
src="../../assets/img/homeVip.png"
width="65"
height="16"
/>
</div>
<div class="row MarketfigurePhon">
<span>ID:123453789</span>
<span>电话:180****1613</span>
<div class="row items-center">
<span class="text-weight-bolder" style="font-size: 18px;">{{ userInfo.nickname }}</span>
</div>
<div class="text-small text-info" v-if="userInfo.it">团队或企业:{{ userInfo.company }}</div>
<div class="text-small text-info" v-else>个人用户</div>
</div>
</div>
<div class="MarketEquity">
<div class="MarketEquityNum">
<span>功能权益</span>
<span>5+</span>
<div class="vip-box rounded row q-my-lg items-end" :style="{ background: userTheme?.bg }">
<div class="text-white col">
<div class="text-weight-bolder">{{ userTheme?.desc }}</div>
<div class="col text-light q-mt-sm">当前权益:{{ (userInfo.it || userInfo.iv?fr.length:4) }}</div>
<div class="col text-light q-mt-sm text-small" v-if="userInfo.it || userInfo.iv">有效期至:{{ userInfo.expire }}</div>
</div>
<div class="MarketEquityTime">有效期至2024.07.03</div>
<div :style="{'background':vipTheme.color}" @click="openOrderViewHandler(1)" v-if="!userInfo.iv && !userInfo.it" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-sm q-px-md no-select">升级专业版</div>
<div :style="{'background':enTheme.color}" @click="openOrderViewHandler(0)" v-if="userInfo.iv && !userInfo.it" class="text-white pingfangr q-ml-lg rounded cusor-pointer q-py-sm q-px-md no-select">升级企业</div>
<div v-if="userInfo.it && (userInfo.ia||userInfo.ic)" @click="openOrderViewHandler(0)" style="background-color: #F1F2F4;" class="text-dark text-bold pingfangr q-ml-lg rounded cusor-pointer q-px-md q-py-sm no-select">立即续费</div>
</div>
<div class="MarketCapacity">
<div>
<el-progress
......@@ -65,15 +59,15 @@
<div class="MarketFootmark row items-center flex-between">
<div>
<span>足迹</span>
<b>10</b>
<b>{{ sampleData[1] }}</b>
</div>
<div>
<span>收藏</span>
<b>10</b>
<b>{{ sampleData[2] }}</b>
</div>
<div>
<span>共享</span>
<b>10</b>
<span>行程/广告</span>
<b>{{ sampleData[0] }}</b>
</div>
</div>
<div class="TranLine"></div>
......@@ -103,6 +97,7 @@
</div>
<!-- 创建设计 -->
<temDesign :addTem="addVisible" @close="addVisible=false"/>
<OrderReview v-if="orderVisible" :show-person="isShowPerson" :default-type="isShowPerson?1:2" @close="()=>orderVisible=false"></OrderReview>
</template>
<script lang="ts" setup>
import { ref } from "vue";
......@@ -111,6 +106,11 @@ import { storeToRefs } from "pinia";
import { useRouter } from "vue-router";
import { openNewBlank } from "@/utils/common";
import temDesign from "@/components/home/temDesign.vue";
import { EntMemberRight, ENT_USER_THEME, FreeMemberRight, PersonMemberRight, VIP_USER_THEME } from "@/configs/customer";
import OrderReview from '@/views/components/Order/Review.vue'
import UserServices from "@/services/UserService";
import { ApiResult } from "@/configs/axios";
const props = defineProps({
size: {
type: Number,
......@@ -118,10 +118,17 @@ const props = defineProps({
},
});
const addVisible = ref(false)
const orderVisible = ref(false)
const forwardProduct = () => router.push('/p/show')
const router = useRouter()
const useUser = useUserStore();
const { userInfo } = storeToRefs(useUser);
const userTheme = useUser.getUserTheme
const vipTheme = VIP_USER_THEME
const enTheme = ENT_USER_THEME
const fr = userInfo.value.it?EntMemberRight:(userInfo.value.iv?PersonMemberRight:FreeMemberRight)
const isShowPerson = ref(true)
const sampleData = ref<any[]>([0,0,0])
const format = (percentage: number) => {
return percentage == 100 ? '' : ``
}
......@@ -144,14 +151,39 @@ const forward = (url:string|undefined)=>{
const loginOutHandler = ()=>{
useUser.setUserLoginOut()
}
const openOrderViewHandler = (t:number)=>{
isShowPerson.value=t==1
orderVisible.value = true
}
const getSampleHandler = async ()=>{
const response = await UserServices.GetTripSampleCountAsync()
if(response.data.resultCode == ApiResult.SUCCESS) sampleData.value = response.data.data
else sampleData.value = [0,0,0]
}
getSampleHandler()
</script>
<style scoped>
.MarketfigureName {
font-family: PingFang SC;
font-weight: bold;
font-size: 18px;
color: #000000;
margin-top: 3px;
.vip-box {
padding: 16px;
position: relative;
font-size: 14px;
color:#FFF;
z-index: 1;
width:100%;
overflow: hidden;
}
.vip-box::after {
position: absolute;
top: 0;
right: -48px;
bottom: -12px;
z-index: -1;
width: 100%;
background: url('https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1713496804000_500.png') no-repeat right center / contain;
content: "";
transform: scale(2);
transform-origin: right center;
}
.MarketfigureMin img {
margin-top: 18px;
......
......@@ -14,7 +14,7 @@ import { onMounted, ref,provide } from 'vue';
<style scoped>
.footer-from{
width: 100%;
position: fixed;
/* position: fixed; */
height: 10vh;
left: 0;
right: 0;
......
......@@ -12,9 +12,9 @@ export interface MemberRights{
range:('F'|'P'|'E')[]
}
export const FREE_USER_THEME:CustomerTheme = {name:'FREE',bg:'linear-gradient(270deg, #94A3C0 0%, #99A3B8 100%)',color:'#94a3c0', desc:'免费版·个人'}
export const VIP_USER_THEME:CustomerTheme = {name:'EN',bg:'linear-gradient(270deg, #4165E2 0%, #5276F5 100%)',color:'#dd9b38', desc:'会员版·个人'}
export const ENT_USER_THEME:CustomerTheme = {name:'VIP',bg:'linear-gradient(270deg, #DD9B38 0%, #E6B351 100%)',color:'#252860', desc:'会员版·组织/企业'}
export const FREE_USER_THEME:CustomerTheme = {name:'FREE',bg:'linear-gradient(270deg, #94A3C0 0%, #99A3B8 100%)',color:'#94a3c0', desc:'个人·免费版'}
export const VIP_USER_THEME:CustomerTheme = {name:'EN',bg:'linear-gradient(270deg, #4165E2 0%, #5276F5 100%)',color:'#dd9b38', desc:'组织/企业·专业版'}
export const ENT_USER_THEME:CustomerTheme = {name:'VIP',bg:'linear-gradient(270deg, #DD9B38 0%, #E6B351 100%)',color:'#252860', desc:'个人·专业版'}
export const TME_USER_THEME:CustomerTheme = {name:'TME',bg:'linear-gradient(270deg, #DD9B38 0%, #E6B351 100%)',color:'#252860', desc:'会员版·模版'}
export const CustomerThemeConfig:CustomerTheme[] = [FREE_USER_THEME,VIP_USER_THEME,ENT_USER_THEME,TME_USER_THEME]
......
......@@ -31,5 +31,10 @@ class OrgService{
const msg={logo,name}
return Api.Post("travel_set_tenant_info",msg)
}
static async DissTenantAsync(r:string,p:string):Promise<HttpResponse>{
const msg={r,p}
return Api.Post("travel_diss_tenant", msg)
}
}
export default OrgService;
\ No newline at end of file
......@@ -58,5 +58,9 @@ class UserServices{
let msg = {}
return Api.Post("travel_set_userexit_tenant",msg)
}
static async GetTripSampleCountAsync():Promise<HttpResponse>{
let msg = {}
return Api.Post("travel_sample_count",msg)
}
}
export default UserServices;
\ No newline at end of file
......@@ -26,7 +26,7 @@ const menus:{menu:Menu,owner:MenuOwner}[] = [
{menu:{name:'成员管理',icon:'IconPeoples',url:'/a/u'},owner:'A'},
{menu:{name:'数据统计',icon:'IconDashBoard',url:'/a/d'},owner:'A'},
{menu:{name:'水印设置',icon:'IconTag',url:'/a/w'},owner:'A'},
{menu:{name:'订单/发票',icon:'IconCurrency',url:'/a/order'},owner:'A'},
{menu:{name:'订单/发票',icon:'IconCurrency',url:'/a/order'},owner:'E'},
{
menu:{
name:'更多设置 ',
......@@ -84,8 +84,10 @@ export const useMenuStore = defineStore('menu', {
getTeamMenu:(state)=>{
const userStore= useUserStore()
const userInfo = userStore.getUser
let userPermissions:MenuOwner[] = ['A']
if(userInfo.ic) userPermissions.push('E')
if(userInfo.it && (userInfo.ia || userInfo.ic)){
const finds = menus.filter(x=>x.owner=='A')
const finds = menus.filter(x=>userPermissions.includes(x.owner))
return finds.map(x=>x.menu)
}
return new Array<Menu>()
......
......@@ -62,6 +62,7 @@ export const useUserStore = defineStore('user', {
d.expire = d.Expire
d.ic = d.IsGroupCreate
d.id = d.DisplayId
d.iv = 0
this.userInfo = d
if(!this.userInfo.photo || !this.userInfo.photo.includes('http://')|| !this.userInfo.photo.includes('https://')){
this.userInfo.photo = USER_DEFAULT_HEADER
......
......@@ -77,7 +77,12 @@
<div class="text-info text-small">你的创作空间</div>
<div class="q-py-xl flex-center items-center column">
<el-avatar :size="100" shape="square" class="bg-transparent" :src="userInfo.photo"></el-avatar>
<div class="q-mt-md text-weight-bold" style="font-size: 18px;">{{ userInfo.nickname }}</div>
<div class="row items-center flex-center q-mt-md ">
<div class="text-weight-bold" style="font-size: 18px;">{{ userInfo.nickname }}</div>
<el-tag type="primary" class="q-ml-md" v-if="userInfo.it">企业专业版</el-tag>
<el-tag type="warning" class="q-ml-md" v-else-if="userInfo.iv">个人专业版</el-tag>
<el-tag type="info" class="q-ml-md" v-else>个人免费版</el-tag>
</div>
<div class="q-mt-md text-small text-info">{{ userInfo.company }}</div>
<div class="q-mt-lg row items-center">
<el-button @click="loginOutHandler">退出登录</el-button>
......
......@@ -106,7 +106,7 @@
</span>
</div>
</el-tooltip>
<el-tooltip effect="dark" content="模板管理中心" placement="right">
<el-tooltip effect="dark" content="模板管理中心" placement="right" v-if="userInfo.isTemplate">
<div class="left-button q-mt-md" @click="redicetTo('/m')">
<IconStarOne size="24" theme="filled" style="color:#564bec4d"></IconStarOne>
</div>
......@@ -154,8 +154,8 @@
</div>
</div>
<el-divider />
<el-menu mode="vertical">
<el-menu-item index="1" class="rounded" v-if="!userInfo.it">
<el-menu mode="vertical no-select">
<el-menu-item index="1" class="rounded" v-if="!userInfo.it" @click="()=>visibleFind=true">
<el-icon><Plus /></el-icon>
<span>加入企业</span>
</el-menu-item>
......@@ -176,7 +176,7 @@
</el-popover>
</div>
<div class="q-mx-md col bg-white right-box row">
<router-view />
<router-view />
</div>
</div>
</div>
......@@ -186,6 +186,7 @@
<invite-member v-if="showAddMember" :show-type="1" @close="()=>showAddMember=false"></invite-member>
<join-enterprise></join-enterprise>
<exit-tenant v-if="visibleExit" @close="()=>visibleExit=false"></exit-tenant>
<find-team v-if="visibleFind" @close="()=>visibleFind=false"></find-team>
</template>
<script lang="ts" setup>
......@@ -198,7 +199,7 @@ import { Plus, Setting } from "@element-plus/icons-vue";
import { openNewBlank } from "@/utils/common";
import { useSellTemplateStore } from "@/store";
import { useRouter } from "vue-router";
import { ref } from "vue";
import { reactive, ref } from "vue";
import OrderReview from '@/views/components/Order/Review.vue'
import { ElLoading } from "element-plus";
import OrderService from "@/services/OrderService";
......@@ -206,6 +207,7 @@ import { ApiResult } from "@/configs/axios";
import InviteMember from "@/views/components/Team/InviteMember.vue";
import JoinEnterprise from "@/views/components/Team/JoinEnterprise.vue";
import ExitTenant from "@/views/components/Team/ExitTenant.vue";
import FindTeam from "@/views/components/Team/FindTeam.vue";
const { userInfo } = storeToRefs(useUserStore());
......@@ -216,7 +218,11 @@ const isWorkspace = ref(true)
const activeOrderId = ref('')
const showAddMember=ref(false)
const visibleExit = ref(false)
const visibleFind = ref(false)
const popoverRef = ref()
const font = reactive({
color: 'rgba(0, 0, 0, .15)',
})
isWorkspace.value = !router.currentRoute.value.path.includes('/space/cp')
const openMarketHandler = (type: string = "") => {
......
......@@ -212,8 +212,9 @@
<div style="height:40px;" class="q-mt-md no-bg" background="transparent" v-loading="loading" element-loading-text="正在加载中"></div>
</div>
</div>
<foote v-if="(queryObj.pageCount == queryObj.pageIndex || queryObj.pageCount==0) && !loading"></foote>
</div>
<foote></foote>
<!-- 行程、广告图详情 -->
<temDetails :DetaTem="DetailsVisible" :Details="datas.TemDetails" @close="DetailsVisible=false"/>
</template>
......@@ -765,7 +766,7 @@ onMounted(()=>{
}
.Market-from{
background: linear-gradient(0deg, #FFF, #E3ECFF);
height: 90vh;
height: 100vh;
overflow: auto;
}
.marketTag .el-check-tag.is-checked,.marketTag .el-check-tag{
......
......@@ -8,19 +8,93 @@
<div class="q-mt-lg text-small text-info">解散企业后,您将不可再进入该企业,企业内所有内容、成员将会被永久删除。该操作不可逆,请谨慎操作!</div>
</div>
<div>
<el-button type="danger" class="ppt-button">解散</el-button>
<el-button type="danger" class="ppt-button" @click="dissTeamHandler">解散</el-button>
</div>
</div>
</div>
</div>
<el-dialog v-model="dissVisible" title="确认解散企业" style="width:480px;" :close-on-click-modal="false" :close-on-press-escape="false" :show-close="false">
<main class="f14 text-dark">
<div>请确认已知晓以下解散企业的操作结果</div>
<div><el-checkbox v-model="checked[0]" :disabled="loading" label="将删除所有成员的作图记录" size="large" /></div>
<div><el-checkbox v-model="checked[1]" :disabled="loading" label="将删除团队空间/企业资源库全部内容" size="large" /></div>
<div><el-checkbox v-model="checked[2]" :disabled="loading" label="删除后内容无法找回" size="large" /></div>
<div><el-checkbox v-model="checked[3]" :disabled="loading" label="解散后组织无法使用,不可恢复" size="large" /></div>
<div class="q-mt-lg">
<div>解散企业的原因</div>
<el-select v-model="selectedReason" :disabled="loading" placeholder="请选择解散企业的原因" class="full-width q-my-md" size="large">
<el-option label="企业重复创建" value="企业重复创建" />
<el-option label="离职或工作变动,不需要使用" value="离职或工作变动,不需要使用" />
<el-option label="团队解散/公司停止运营" value="团队解散/公司停止运营" />
<el-option label="产品功能无法满足使用" value="产品功能无法满足使用" />
<el-option label="其他" value="其他" />
</el-select>
<el-input v-model="inputReason" :disabled="loading" v-if="selectedReason=='其他'" class="full-width pingfangr" size="large" placeholder="请输入原因" />
</div>
<div class="q-mt-lg">
<div>超级管理员身份认证</div>
<el-input v-model="pass" type="password" class="full-width q-mt-md" size="large" :disabled="loading" placeholder="请输入登录密码" />
</div>
<div class="text-right q-mt-xl">
<el-button type="info" size="large" class="ppt-button text-weight-bold" :disabled="loading" @click="()=>dissVisible=false">取消</el-button>
<el-button type="primary" size="large" class="ppt-button" v-if="enabledSubmit" :loading="loading" @click="dissTenantSubmit">确认解散</el-button>
<el-button type="info" size="large" class="ppt-button text-weight-bold text-grey-8" disabled v-else>确认解散</el-button>
</div>
</main>
</el-dialog>
</template>
<script lang="ts" setup>
import { ApiResult } from "@/configs/axios";
import OrgService from "@/services/OrgService";
import { useUserStore } from "@/store";
import { ElMessage } from "element-plus";
import { storeToRefs } from "pinia";
import { computed } from "vue";
import { ref } from "vue";
const dissVisible = ref(false)
const checked = ref<boolean[]>([false,false,false,false])
const selectedReason = ref('企业重复创建')
const inputReason = ref('')
const pass = ref('')
const loading = ref(false)
const enabledSubmit = computed(()=>{
let flag = !checked.value.includes(false)
if(flag){
if(selectedReason.value=='其他'){
flag = inputReason.value!=''
}
if(flag) flag = pass.value!=''
}
return flag
})
const dissTeamHandler = ()=>{
dissVisible.value = true
checked.value.forEach((x) => {
x=false
})
}
const dissTenantSubmit= async ()=>{
if(loading.value || !enabledSubmit.value) return
loading.value = true
const r = selectedReason.value=='其他'?inputReason.value:selectedReason.value
const response= await OrgService.DissTenantAsync(r,pass.value)
const {userInfo} = storeToRefs(useUserStore())
if(response.data.resultCode == ApiResult.SUCCESS){
ElMessage.success('当前团队/企业已注销,账号即将退出')
setTimeout(() => {
useUserStore().setUserLoginOut()
}, 1000);
}else{
ElMessage.error(response.data.message)
}
loading.value=false
}
</script>
<style>
......
......@@ -117,7 +117,6 @@ import { useRouter } from "vue-router";
const useUser = useUserStore()
const { userInfo } = storeToRefs(useUser)
const userTheme = useUser.getUserTheme
console.log(userTheme)
const vipTheme = VIP_USER_THEME
const enTheme = ENT_USER_THEME
const router = useRouter()
......
......@@ -20,9 +20,9 @@
<component :is="x.icon" style="font-size: 20px;"></component>
<span class="q-ml-lg">{{ x.name }}</span>
</template>
<el-menu-item v-for="(sub,y) in x.children" :key="y" :index="`${i}_y`" :route="sub.url">{{ sub.name }}</el-menu-item>
<el-menu-item v-for="(sub,y) in x.children" :key="y" :index="`${i}_${y}`" :route="sub.url">{{ sub.name }}</el-menu-item>
</el-sub-menu>
<el-menu-item :index="i" :route="x.url" v-else>
<el-menu-item :index="`${i}`" :route="x.url" v-else>
<component :is="x.icon" style="font-size: 20px;"></component>
<span class="q-ml-lg">{{ x.name }}</span>
</el-menu-item>
......@@ -46,7 +46,7 @@ import { useRouter } from "vue-router";
const router = useRouter()
const useMenu = useMenuStore();
const menus = ref(useMenu.getTeamMenu);
const activeIndex = ref(0)
const activeIndex = ref('0')
const forwardSpace = () => router.push('/space')
if(menus.value.length==0){
......@@ -58,7 +58,17 @@ if(menus.value.length==0){
watch(() => router.currentRoute.value.path, (toPath) => {
menus.value = useMenu.getTeamMenu
if(!menus.value) return
activeIndex.value = menus.value.findIndex(x=>x.url==router.currentRoute.value.path)
menus.value.forEach((x,i)=>{
if(x.url==router.currentRoute.value.path){
activeIndex.value=i.toString()
} else if(x.children&&x.children.length>0){
x.children.forEach((y,yi)=>{
if(y.url==router.currentRoute.value.path){
activeIndex.value=`${i}_${yi}`
}
})
}
})
},{immediate: true,deep: true})
</script>
......
......@@ -5,8 +5,8 @@
<IconClose size="0.83vw"></IconClose>
</div>
<div class="tabs-version-box row">
<div class="item col" :class="{'active':activeVersion==1}" @click="changeVersionHandler(1)">个人版</div>
<div class="item col" :class="{'active':activeVersion==2}" @click="changeVersionHandler(2)">企业版</div>
<div class="item col" :class="{'active':activeVersion==1}" @click="changeVersionHandler(1)" v-if="showPerson">个人版</div>
<div class="item col" :class="{'active':activeVersion==2}" @click="changeVersionHandler(2)" v-if="showEnterprise">企业版</div>
</div>
<div class="pre-order row">
<div class="item column">
......@@ -87,6 +87,14 @@ const props = defineProps({
defaultType: {
type: Number,
default:1
},
showPerson:{
type:Boolean,
default:true
},
showEnterprise:{
type:Boolean,
default:true
}
})
......
......@@ -11,7 +11,7 @@
</main>
<template #footer>
<el-button @click="closed" size="large" class="ppt-button" :disabled="loading">我再想想</el-button>
<el-button :type="removeTokenStr!='退出并清空'?'info':'primary'" size="large" @click="exitEnterpriseHandler" :loading="loading" :disabled="removeTokenStr!='退出并清空' || loading" class="ppt-button text-grey-8">退出并清空</el-button>
<el-button :type="removeTokenStr!='退出并清空'?'info':'primary'" size="large" @click="exitEnterpriseHandler" :loading="loading" :disabled="removeTokenStr!='退出并清空' || loading" class="ppt-button">退出并清空</el-button>
</template>
</el-dialog>
</template>
......
<template>
<el-dialog v-model="show" title="加入团队/企业" style="width:450px;" @close="closed" :close-on-click-modal="false" :close-on-press-escape="false">
<main>
<el-input v-model="code" :disabled="loading" @change="queryCodeHandler" class="text-dark full-width rounded" style="font-family: pingfangr !important;" size="large" placeholder="请输入邀请码">
<template #suffix>
<IconSearch size="18" class="cusor-pointer" @click="queryCodeHandler" v-if="!loading"></IconSearch>
<IconRefresh size="18" class="search-loading" v-if="loading"></IconRefresh>
</template>
</el-input>
<div class="q-mt-sm text-small text-info q-mb-lg">邀请码是邀请链接最后一个'/'后面的数字和字母</div>
<div class="no-select row items-center q-pa-lg rounded" style="background-color: rgb(240, 246, 255);" v-if="inviteInfo">
<el-avatar :size="44" :src="inviteInfo.logo" shape="square"></el-avatar>
<div class="q-ml-md">
<div class="text-dark text-weight-bold">{{ inviteInfo.company }}</div>
<div class="text-grey-8 text-small q-mt-sm">{{ inviteInfo.expire }}后失效</div>
</div>
</div>
<el-alert :title="errorMsg" type="error" :closable="false" v-if="errorMsg!=''" />
<div class="text-right q-mt-xl">
<el-button type="info" size="large" class="ppt-button text-weight-bold" :disabled="loading" @click="closed">取消</el-button>
<el-button type="primary" size="large" class="ppt-button" v-if="inviteInfo" @click="joinTenantHandler" :loading="loading">确认加入</el-button>
<el-button type="info" size="large" class="ppt-button text-weight-bold text-grey-8" disabled v-else>确认解散</el-button>
</div>
</main>
</el-dialog>
</template>
<script lang="ts" setup>
import { ApiResult } from "@/configs/axios"
import UserServices from "@/services/UserService"
import { useUserStore } from "@/store"
import { ElMessage } from "element-plus"
import { ref } from "vue"
const props = defineProps({})
const emit = defineEmits<{
(event: 'close'): void,
(event: 'apply'): void
}>()
const useUser = useUserStore()
const show = ref(true)
const code = ref('')
const loading = ref(false)
const inviteInfo = ref()
const errorMsg = ref('')
const closed = () => {
show.value=false
emit('close')
}
const queryCodeHandler = async () => {
if(loading.value || code.value=='') return;
loading.value = true
inviteInfo.value = null
errorMsg.value = ''
const response = await UserServices.ValidateInviteCodeAsync(code.value)
if (response.data.resultCode == ApiResult.SUCCESS) {
inviteInfo.value = response.data.data
}else errorMsg.value = response.data.message
loading.value=false
}
const joinTenantHandler = async ()=>{
if(!inviteInfo.value || loading.value) return
loading.value = true
const response = await UserServices.JoinTeamByInviteCodeAsync(inviteInfo.value.code)
if(response.data.resultCode == ApiResult.SUCCESS){
useUser.setNewUserInfo(response.data.data)
ElMessage.success({message:`成功加入了「${inviteInfo.value.company}」`})
setTimeout(() => {
location.reload()
}, 1000);
}else{
ElMessage.error({message:response.data.message})
loading.value=false
}
}
</script>
<style scoped>
.search-loading{
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment