dma-work-h5/src/views/appDir/bindEnterprise.vue
2026-04-08 09:51:49 +08:00

290 lines
8.2 KiB
Vue

<template>
<div v-if="loading" class="ui-boundEnterprise">
<div>
<div class="ui-title font_48 color3 bold">绑定订单职责</div>
<div class="font_28 color3 ui-pl-32 ui-pb-32">当前可绑定职责:</div>
<div v-if="typeList && typeList.length > 0" class="ui-item-select">
<div v-for="(item, index) in typeList" :key="index" class="f-fbc ui-pb-36" @click="selectChange(item)">
<div class="f-fcl">
<img v-if="item.name == '主教练'" class="ui-duty-icon" src="https://image.fulllinkai.com/202305/06/103763ce22be9a1bd964080a6b45bdf0.png" alt="" />
<img v-else-if="item.name == '副教练'" class="ui-duty-icon" src="https://image.fulllinkai.com/202305/06/b73e57901f943fa31eec78b21c8e8eac.png" alt="" />
<img v-else-if="item.name == '客服'" class="ui-duty-icon" src="https://image.fulllinkai.com/202305/06/6a96db6ec2a77503b84e6213f9d905a6.png" alt="" />
<img v-else class="ui-duty-icon" src="https://image.fulllinkai.com/202305/06/697595eb7b086798bef1706563ce3b92.png" alt="" />
<div class="font_32 color3 ui-item-select-text">{{ item.name }}</div>
</div>
<div>
<img v-show="!item.state" class="ui-item-select-icon" src="https://image.fulllinkai.com/202306/25/ba1565f2cf6d59945ec6f522c8caaa5d.png" alt="" />
<img v-show="item.state" class="ui-item-select-icon" src="https://image.fulllinkai.com/202306/25/1c57dd3dd3d4062255c159d73a437b83.png" alt="" />
</div>
</div>
<div class="ui-btn f-fcc font_30 colorF bold" @click="saveRole">确认绑定</div>
<div class="font_24 color9 text-center">绑定后可使用该职责</div>
</div>
<div v-else>
<img class="ui-no-role-icon" src="https://image.fulllinkai.com/202306/07/247d8ae6b90334457d1b39129cd5c490.png" alt="" />
<div class="font_30 color9 text-center">暂无可绑定的职责</div>
</div>
</div>
</div>
<div v-else class="ui-skeleton">
<div class="f-fcl">
<div class="ui-skeleton-photo"></div>
<div>
<div class="ui-skeleton-name"></div>
<div class="ui-skeleton-name-v2"></div>
</div>
</div>
<div class="ui-skeleton-line"></div>
<div v-for="(item, index) in skeleton" :key="index" class="f-fcl">
<div class="ui-skeleton-item">{{ item }}</div>
<div class="ui-skeleton-item-v2"></div>
</div>
<div class="font_28 color9 text-center">-- 加载中 --</div>
</div>
<img class="ui-icon" src="https://image.fulllinkai.com/202306/26/05b70e1b55dfed082b28fda935653343.png" alt="" />
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { showToast } from 'vant';
import weChat from '@/utils/weChat';
import router from '@/router';
import { useUserStore } from '@/store/modules/user';
defineOptions({ name: 'BoundEnterprise' });
const userStore = useUserStore() as any;
const loading = ref(false);
const isBind = ref<any>(''); // 是否绑定企业微信
const isRole = ref<any>(''); // 群是否绑定职责
const isRoleIdList = ref<any[]>([]); // 选择跟群绑定的职责
const typeList = ref<any[]>([]);
const throttle = ref<any>(true);
const skeleton = ref<any[]>(['', '', '', '', '', '']);
// 获取是否绑定企业微信 is_bind: true, false. 是否绑定职责is_role: true, false. 可绑定的职责列表 role_list
const getState = () => {
weChat({ url: `/h5/work/${userStore.chatId}/group/orders/status`, hideLoading: true, method: 'get' })
.then((res) => {
const result = res.data;
userStore.weChatBindState = result.status;
userStore.chiefCoach = result.is_main_coach;
userStore.coach = result.is_coach;
userStore.service = result.is_customer;
isBind.value = result.is_bind;
isRole.value = result.is_role;
if (isRole.value) {
router.replace({
name: 'personalCenter',
});
return;
}
if (result.role_list && result.role_list.length > 0) {
result.role_list.forEach((item) => {
typeList.value.push({
id: item.id,
name: item.name,
state: 0,
});
});
}
loading.value = true;
})
.catch((err) => {
console.log(err);
});
};
// 为群绑定职责
const saveRole = () => {
if (throttle.value) {
let data = {
chat_id: userStore.chatId,
role_ids: isRoleIdList.value,
};
if (isRoleIdList.value.length === 0) {
showToast('请选择需要绑定的职责');
return;
}
throttle.value = false;
weChat({ url: `h5/order/bind/role`, data, method: 'post' })
.then((res) => {
let result = res.data;
console.log(result, '7777');
showToast('绑定成功');
setTimeout(() => {
throttle.value = true;
router.replace({
name: 'personalCenter',
});
}, 1000);
})
.catch((err) => {
throttle.value = true;
console.log(err);
});
}
};
const selectChange = (e) => {
console.log(e, '7777');
if (e.state === 0) {
isRoleIdList.value.push(e.id);
e.state = 1;
} else {
isRoleIdList.value = isRoleIdList.value.filter((id) => {
return id !== e.id;
});
e.state = 0;
}
console.log(isRoleIdList.value);
};
onMounted(() => {
let route = router.currentRoute.value.query;
console.log(route);
if (route.chat_id) {
userStore.chatId = route.chat_id;
}
userStore.serviceUserId = route.service_user_id;
getState();
});
</script>
<style lang="scss" scoped>
.ui-boundEnterprise {
background: #ffffff;
overflow-y: auto;
height: 100vh;
}
.ui-title {
padding: px2rem(120) px2rem(0) px2rem(70) px2rem(50);
}
.ui-item-select {
position: relative;
z-index: 99;
padding: 0 px2rem(30);
.ui-duty-icon {
width: px2rem(40);
height: px2rem(40);
display: block;
margin-right: px2rem(4);
}
.ui-item-select-icon {
width: px2rem(36);
height: px2rem(36);
display: block;
margin-right: px2rem(10);
}
.ui-item-select-text {
line-height: px2rem(40);
}
}
.ui-mobile {
position: relative;
z-index: 33;
margin: px2rem(0) px2rem(50);
border-bottom: px2rem(2) solid #d8d8d8;
.ui-mobile-text {
line-height: px2rem(44);
}
.ui-user-input {
width: px2rem(480);
font-size: px2rem(32);
padding: px2rem(24) px2rem(12);
border-radius: px2rem(16);
background: initial;
line-height: initial;
}
// 去除默认下划线
::v-deep(.van-cell:after) {
position: relative;
}
::v-deep(input::-webkit-input-placeholder) {
color: #999999;
}
}
.ui-no-role-icon {
width: px2rem(270);
height: px2rem(200);
display: block;
margin: px2rem(40) auto px2rem(20) auto;
}
.ui-btn {
position: relative;
z-index: 33;
width: px2rem(650);
height: px2rem(88);
background: #5ac7a0;
border-radius: px2rem(40);
margin: px2rem(100) auto px2rem(30) auto;
}
.ui-icon {
width: 100vw;
height: px2rem(946);
position: fixed;
bottom: 0;
left: 0;
}
.ui-skeleton {
position: relative;
z-index: 2;
padding: px2rem(60);
.ui-skeleton-photo {
width: px2rem(120);
height: px2rem(120);
border-radius: 50%;
background: #f5f5f5;
display: block;
margin-right: px2rem(40);
}
.ui-skeleton-name,
.ui-skeleton-name-v2 {
width: px2rem(160);
height: px2rem(30);
border-radius: px2rem(16);
background: #f5f5f5;
}
.ui-skeleton-name-v2 {
width: px2rem(240);
margin-top: px2rem(16);
}
.ui-skeleton-line {
width: 100%;
height: px2rem(2);
background: #f5f5f5;
margin: px2rem(30) 0 px2rem(60) 0;
}
.ui-skeleton-item,
.ui-skeleton-item-v2 {
width: px2rem(52);
height: px2rem(52);
border-radius: px2rem(26);
background: #f5f5f5;
margin-bottom: px2rem(60);
}
.ui-skeleton-item-v2 {
width: px2rem(480);
margin-left: px2rem(22);
}
}
</style>