<template>
    <div class="page">
        <div class="top adfacjb">
            <div class="t_l">
                <p>报告管理</p>
                <p class="tip">访问和分析PERILL评估报告</p>
            </div>
            <div class="t_r">
                <!-- <el-button type="primary" icon="el-icon-upload2">导出报告</el-button> -->
            </div>
        </div>
        <div class="tabs adfac">
            <div class="t_pre" :class="{'active':tidx===1}" @click="handleChangeTab(1)">团队报告</div>
            <div class="t_pre" :class="{'active':tidx===2}" @click="handleChangeTab(2)">个人报告</div>
        </div>
        <template v-if="tidx===1">
            <div class="query adfacjb">
                <el-select v-model="queryParams.questionnaireId" placeholder="问卷" style="width: 100%" @change="getTeamList(callback)" clearable>
                    <el-option v-for="item in useAgentStore().questionnaireList" :key="item.id" :label="item.title" :value="item.id"/>
                </el-select>
            </div>
            <div class="list">
                <reportList :item="item" :reportList="item.reportList" :showMore="item.showMore"
                    v-for="(item, index) in teamList" :key="index"
                    @toggleReport="e=>toggleReportTeam(e,index)" 
                    @deleteReport="e=>deleteTeamReport(e,index,item)"
                    @sendReport="e=>sendReportTeam(e,index,item)"
                    @reCreateReport="e=>reCreateReportTeam(e,index,item)"
                    @refreshReportList="e=>refreshReportTeamList(e,index)">
                </reportList>
                <el-row style="display: flex;justify-content: center;">
                    <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="queryParams.page"
                        :page-sizes="[2, 5, 10]"
                        :page-size="2"
                        layout="total, sizes, prev, pager, next, jumper"
                        :total="total"
                        v-show="total > 0">
                    </el-pagination>
                </el-row>
            </div>
        </template>
        <template v-else-if="tidx===2">
            <div class="query adfacjb">
                <el-input placeholder="请输入公司名" prefix-icon="el-icon-search" v-model="queryParams2.name" style="width: calc(100% - 424px);" @keyup.enter.native="getPersonList(callback)"></el-input>
                <el-select v-model="queryParams2.teamId" placeholder="所属团队" style="width: 400px;" @change="getPersonList(callback)">
                    <el-option v-for="item in useAgentStore().teamList" :key="item.id" :label="item.teamName" :value="item.id"></el-option>
                </el-select>
            </div>
            <div class="list">
                <reportList :item="item" :reportList="item.reportList" :showMore="item.showMore" :isTeam="false"
                    v-for="(item, index) in personList" :key="index"
                    @toggleReport="e=>toggleReportPerson(e,index)"
                    @deleteReport="e=>deletePersonReport(e,index,item)"
                    @sendReport="e=>sendReportPerson(e,index,item)"
                    @reCreateReport="e=>reCreateReportPerson(e,index,item)"
                    @refreshReportList="e=>refreshReportPersonList(e,index)">
                </reportList>
            </div>
        </template>
    </div>
</template>

<script setup name="">
    import reportList from '@/components/reportList/index.vue'
    import { ref, getCurrentInstance, onMounted, provide } from 'vue'
    const { proxy } = getCurrentInstance();
    import { 
        getTeamQuestionnaireList,
        getTeamReportWjList,
        getPersonReportWjList,
        deleteTeamReportWj,
        sendReportById,
        sendReportUserById,
        reCreateReport,
        getPersonQueList 
     } from "@/api/agent/index.js";
    import {useAgentStore} from "@/store_v3/modules/agent";
    import useCommonStore from "@/store_v3/modules/common";
    useAgentStore().getQuestionnaireData();
    useAgentStore().getTeamData();
    
    const tidx = ref(1)
    const queryParams = ref({
        page:1,
        limit:2,
        questionnaireId: '',
        status: '',
    })
    const queryParams2 = ref({
        name: '',
        teamId: '',
    })
    const total = ref(0)
    const teamList = ref([])
    const personList = ref([])

    const handleChangeTab = (idx) => {
        tidx.value = idx;
        if(idx===1) getTeamList()
        else if(idx===2) getPersonList()
    }

    const toggleReportTeam = (e,idx) => {
        useCommonStore().$state.teamIndex = idx;
        teamList.value[idx].showMore = !teamList.value[idx].showMore;
        if(teamList.value[idx].showMore){
            getTeamReportWjList(e.id).then(res=>{
                if(res.code!==0) return proxy.$message.error(res.msg)
                teamList.value[idx].reportList = res.data;
            })
        }else teamList.value[idx].reportList = [];
    }
    const toggleReportPerson = (e,idx) => {
        useCommonStore().$state.personIndex = idx;
        personList.value[idx].showMore = !personList.value[idx].showMore;
        if(personList.value[idx].showMore){
            getPersonReportWjList(e.teamQuestionnaireId).then(res=>{
                if(res.code!==0) return proxy.$message.error(res.msg)
                personList.value[idx].reportList = res.data;
            })
        }else personList.value[idx].reportList = [];
    }

    const getTeamList = (callback) => {
        teamList.value = [];
        // total.value = 0;
        getTeamQuestionnaireList(queryParams.value).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            teamList.value = res.data.list;
            total.value = res.data.total;
            teamList.value = teamList.value.map(item=>{
                return {
                    ...item,
                    showMore:false,
                    reportList:[]
                };
            })
            callback && callback()
        })
    }
    const handleSizeChange = e =>{
        queryParams.value.limit = e;
        getTeamList();
    }
    const handleCurrentChange = e =>{
        queryParams.value.page = e;
        getTeamList();
    }
    const getPersonList = (callback) => {
        personList.value = [];
        let params = {...queryParams2.value}
        getPersonQueList(params).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            personList.value = res.data.filter(d=>d.enterpriseName.indexOf(params.name)>-1);
            personList.value = personList.value.map(item=>{
                return {
                    ...item,
                    showMore:false,
                    reportList:[]
                };
            })
            callback && callback()
        })
    }

    const deleteTeamReport = (e,idx,item) => {
        proxy.$modal.confirm('确认删除该报告吗？如确认会立即执行！').then(async function () {
        let res = await deleteTeamReportWj([e]);
        if(res.code===0){
            proxy.$message.success('删除成功！');
            getTeamReportWjData(useCommonStore().$state.relationId,idx)
        } else proxy.$message.error(res.msg)
        }).then(() => {}).finally(() => {});
    }
    const deletePersonReport = (e,idx,item) => {
        proxy.$modal.confirm('确认删除该报告吗？如确认会立即执行！').then(async function () {
        let res = await deleteTeamReportWj([e]);
        if(res.code===0){
            proxy.$message.success('删除成功！');
            getPersonReportWjData(useCommonStore().$state.teamQuestionnaireId,idx)
        } else proxy.$message.error(res.msg)
        }).then(() => {}).finally(() => {});
    }

    const sendReportTeam = (e,idx,item) => {
        sendReportById(e).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            proxy.$message.success('发送成功！')
            getTeamReportWjData(useCommonStore().$state.relationId,idx)
        })
    }
    const sendReportPerson = (e,idx,item) => {
        sendReportUserById(e,useCommonStore().$state.reportUserId).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            proxy.$message.success('发送成功！')
            getPersonReportWjData(useCommonStore().$state.teamQuestionnaireId,idx)
        })
    }
    const reCreateReportTeam = (e,idx,item) => {
        reCreateReport(e).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            proxy.$message.success('重新生成成功！')
            getTeamReportWjData(useCommonStore().$state.relationId,idx)
        })
    }
    const reCreateReportPerson = (e,idx,item) => {
        reCreateReport(e).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            proxy.$message.success('重新生成成功！')
            getPersonReportWjData(useCommonStore().$state.teamQuestionnaireId,idx)
        })
    }
    const refreshReportTeamList = (e,idx) => {
        getTeamReportWjData(e,idx)
    }
    const refreshReportPersonList = (e,idx) => {
        getPersonReportWjData(e,idx)
    }
    provide('refreshTeamList', refreshReportTeamList)
    provide('refreshPersonList', refreshReportPersonList)
    const getTeamReportWjData = (id,idx) => {
        getTeamReportWjList(id).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            teamList.value[idx].reportList = res.data;
        })
    }
    const getPersonReportWjData = (id,idx) => {
        getPersonReportWjList(id).then(res=>{
            if(res.code!==0) return proxy.$message.error(res.msg)
            personList.value[idx].reportList = res.data;
        })
    }

    onMounted(async ()=>{
        let type = proxy.$route.query?.type;
        let relationId = proxy.$route.query?.relationId;
        if(!type) return getTeamList()
        if(type==1){
            getTeamList(()=>{
                let idx = teamList.value.findIndex(item=>item.id==relationId)
                if(idx>-1) toggleReportTeam(teamList.value[idx],idx)
            })
        }else if(type==2){
            tidx.value = 2;
            getPersonList(()=>{
                let idx = personList.value.findIndex(item=>item.id==relationId)
                if(idx>-1) toggleReportPerson(personList.value[idx],idx)
            })
        }
    })
</script>

<style scoped lang="scss">
    .page{
        padding: 28px 20px;
        background: #FAFAFA;

        .top{
            .t_l{
                p{
                    font-family: PingFang-SC, PingFang-SC;
                    font-weight: bold;
                    font-size: 16px;
                    color: #252525;
                    line-height: 16px;
                    &.tip{
                        font-family: PingFangSC, PingFang SC;
                        font-weight: 400;
                        font-size: 14px;
                        color: #6B7280;
                        line-height: 14px;
                        margin-top: 16px;
                    }

                }
            }
        }

        .tabs{
            width: 100%;
            margin-top: 28px;
            border-bottom: 1px solid #E5E7EB;
            .t_pre{
                width: 116px;
                padding-bottom: 18px;
                position: relative;
                font-family: PingFangSC, PingFang SC;
                font-weight: 400;
                font-size: 14px;
                color: #252525;
                line-height: 16px;
                text-align: center;
                cursor: pointer;
                &.active{
                    font-weight: bold;
                    color: #761E6A;
                    &::after{
                        content: '';
                        width: 116px;
                        height: 2px;
                        background: #761E6A;
                        position: absolute;
                        left: 0;
                        bottom: 0;
                    }

                }
            }
        }

        .query{
            width: 100%;
            padding: 16px 20px;
            box-sizing: border-box;
            background: #FFFFFF;
            border-radius: 6px;
            border: 1px solid #F3F4F6;
            margin-top: 31px;
        }

        .list{
            .l_item{
                margin-top: 10px;
                width: 100%;
                padding: 24px;
                box-sizing: border-box;
                background: #FFFFFF;
                border-radius: 6px;
                border: 1px solid #F3F4F6;
                .li_l{
                    .li_pre{
                        width: 335px;
                        .lit_text{
                            font-family: PingFang-SC, PingFang-SC;
                            font-weight: bold;
                            font-size: 14px;
                            color: #252525;
                            line-height: 14px;
                            text-align: left;
                            overflow: hidden;
                            text-overflow: ellipsis;
                            white-space: nowrap;
                        }
                        .lit_tip{
                            font-family: PingFangSC, PingFang SC;
                            font-weight: 400;
                            font-size: 14px;
                            color: #6B7280;
                            line-height: 14px;
                            text-align: left;
                            margin-top: 16px;
                        }
                    }
                }
            }
        }
    }
</style>