浏览代码

报告管理最新需求修改

htc 11 小时之前
父节点
当前提交
3da1ac9f7a

+ 259 - 0
src/components/reportList/index copy.vue

@@ -0,0 +1,259 @@
+<template>
+  <div class="rl_pre">
+    <div class="rp_top adfacjb">
+      <div class="rlp_l adfac">
+        <div class="rlpl_l">
+          <img src="@/assets/images/agent/report.png">
+        </div>
+        <div class="rlpl_r adfac">
+          <div class="rr_pre rp1">
+            <p class="text"><span v-if="item.programName">{{ item.programName}} - </span>{{ item.enterpriseName||'' }}</p>
+            <p class="tip">{{ item.title||'' }}</p>
+          </div>
+          <div class="rr_pre rp2" v-if="!isTeam">
+            <p class="text">{{ item.realName||'' }}</p>
+            <p class="tip">姓名</p>
+          </div>
+          <div class="rr_pre rp2">
+            <p class="text">{{ item.teamName||'' }}</p>
+            <p class="tip">团队类型</p>
+          </div>
+          <div class="rr_pre rp3" v-if="isTeam">
+            <p class="text">{{ item.endTime||'' }}</p>
+            <p class="tip">截止日期</p>
+          </div>
+          <div class="rr_pre rp6" v-if="!isTeam">
+            <p class="text">{{ item.endTime||'' }}</p>
+            <p class="tip">截止日期</p>
+          </div>
+          <div class="rr_pre rp4" v-if="isTeam">
+            <p class="text">{{ item.finishNum||0 }}</p>
+            <p class="tip">作答人数</p>
+          </div>
+          <div class="rr_pre rp5" v-if="isTeam">
+            <p class="text">{{ item.userNum||0 }}</p>
+            <p class="tip">团队人数</p>
+          </div>
+        </div>
+      </div>
+      <div class="rlp_r">
+        <el-button type="primary" @click.stop="toggleReport(item)">查看报告</el-button>
+      </div>
+    </div>
+    <div class="rp_bottom" v-if="showMore">
+      <el-table :data="reportList" border cell-class-name="vertical-top-cell" empty-text="暂无报告" max-height="578px">
+        <el-table-column label="报告名称" prop="reportName" min-width="200"></el-table-column>
+        <el-table-column label="创建时间" prop="createDate"></el-table-column>
+        <el-table-column label="生成时间" prop="updateDate"></el-table-column>
+        <el-table-column label="状态" prop="state" width="150">
+          <template #default="{ row }">
+            <div class="rp_status adfac">
+              <div class="rps_l" :style="{'background':sColorCfg[row.state]||'#1D2129'}"></div>
+              <div class="rps_r" :style="{'color':sColorCfg[row.state]||'#1D2129'}">{{ sTextCfg[row.state]||'未知' }}</div>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="操作" width="300">
+            <template #default="scope">
+                <el-button link type="text" size="mini" @click="handleReive(scope.row)" v-if="[1,2].includes(scope.row.state)">预览</el-button>
+                <el-button link type="text" size="mini" @click="handledDelete(scope.row)" v-hasPermi="['core:report:delete']">删除</el-button>
+                <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-if="scope.row.state>0">发送报告</el-button>
+                <el-button link type="text" size="mini" @click="handleCreate(scope.row)" v-if="scope.row.state=='-1'">重新生成</el-button>
+                <el-button link type="text" size="mini" @click="handleExport(scope.row)" v-if="scope.row.state>0">导出报告</el-button>
+            </template>
+        </el-table-column>
+    </el-table>
+    </div>
+    <template v-if="pdfShow">
+      <report-pdf :reportId="reportId" :reportName="reportName" :reportData="reportData" :isTeam="isTeam" @cancel="pdfCancel" @refreshReportList="refreshReportList"></report-pdf>
+    </template>
+  </div>
+</template>
+
+<script setup name="ReportList">
+  import reportPdf from '@/components/reportPdf/index.vue'
+  const props = defineProps({
+    item: {
+      type: Object,
+      default: () => {}
+    },
+    reportList: {
+      type: Array,
+      default: () => []
+    },
+    isTeam: {
+      type: Boolean,
+      default: true
+    },
+    showMore: {
+      type: Boolean,
+      default: false
+    }
+  })
+  
+  import { ref, getCurrentInstance, nextTick } from 'vue'
+  const { proxy } = getCurrentInstance();
+  import useCommonStore from "@/store_v3/modules/common";
+  import { 
+    getReportPdfData
+  } from '@/api/agent/index.js'
+
+  const sTextCfg = {
+    1: '未发送',
+    0: '生成中',
+    2: '已发送',
+    '-1': '生成失败'
+  }
+  const sColorCfg = {
+    1: '#22C55D',
+    0: '#FEA400',
+    2: '#2E69EB',
+    '-1': '#F31616'
+  }
+  const pdfShow = ref(false)
+  const reportData = ref({})
+  const reportParentId = ref('')
+  const reportId = ref('')
+  const item = ref(props.item)
+  const isTeam = ref(props.isTeam)
+  const reportName = ref('')
+
+  const emit = defineEmits(['toggleReport','deleteReport','sendReport','reCreateReport','refreshReportList'])
+  const toggleReport = (item) => {
+    if(isTeam.value){
+      useCommonStore().$state.relationId = item?.id;
+    }else{
+      useCommonStore().$state.userRealName = item?.realName;
+      useCommonStore().$state.teamQuestionnaireId = item?.teamQuestionnaireId;
+      useCommonStore().$state.reportUserId = item?.userId;
+    }
+    reportParentId.value = item?.id;
+    emit('toggleReport', item)
+  }
+
+  const pdfCancel = () => {
+    pdfShow.value = false;
+    reportData.value = {};
+    reportParentId.value = '';
+    reportId.value = '';
+    reportName.value = '';
+  }
+  const refreshReportList = (relationId) => {
+    emit('refreshReportList', relationId)
+  }
+
+  const handleReive = (row) => {
+    reportId.value = row.id;
+    reportName.value = row.reportName;
+    getReportPdfData(row.id).then(res => {
+      if(res.code!==0) proxy.$message.error(res.msg);
+      reportData.value = {...res.data,id:row.id,relationId:row.relationId};
+      nextTick(() => {
+        pdfShow.value = true;
+      })
+    })
+  }
+  const handledDelete = (row) => {
+    emit('deleteReport', row.id)
+  }
+
+  const handleSend = (row) => {
+    if(!row.fileUrl) return proxy.$message.error('请先在预览页面生成PDF报告!');
+    if(row.state==2){
+      proxy.$modal.confirm('当前报告已发送,若继续发送会覆盖当前报告,是否继续发送?').then((res) => {
+        if(res == 'confirm'){
+          emit('sendReport', row.id)
+        }
+      })
+    }else emit('sendReport', row.id)
+  }
+  const handleCreate = (row) => {
+    emit('reCreateReport', row?.id)
+  }
+  const handleExport = (row) => {
+    if(!row.fileUrl) return proxy.$message.error('请先在预览页面生成PDF报告!');
+    window.open(row.fileUrl)
+  }
+</script>
+
+<style scoped lang="scss">
+  .rl_pre{
+    padding: 24px;
+    background: #FFFFFF;
+    border-radius: 6px;
+    margin-top: 12px;
+    cursor: pointer;
+
+    .rp_top{
+      .rlp_l{
+        width: calc(100% - 112px);
+        .rlpl_l{
+          img{
+            width: 23px;
+            height: 22px;
+          }
+        }
+        .rlpl_r{
+          width: calc(100% - 23px);
+          padding-left: 24px;
+          box-sizing: border-box;
+          .rr_pre{
+            padding-right: 20px;
+            box-sizing: border-box;
+            .text{
+              font-family: PingFang-SC, PingFang-SC;
+              font-weight: bold;
+              font-size: 14px;
+              color: #252525;
+              line-height: 16px;
+              overflow: hidden;
+              text-overflow: ellipsis;
+              white-space: nowrap;
+            }
+            .tip{
+              font-family: PingFangSC, PingFang SC;
+              font-weight: 400;
+              font-size: 14px;
+              color: #86909C;
+              line-height: 16px;
+              margin-top: 10px;
+            }
+            &.rp1{
+              flex: 1;
+            }
+            &.rp2{
+              width: 140px;
+            }
+            &.rp3,&.rp4, &.rp5{
+              width: 260px;
+            }
+            &.rp6{
+              width: 540px;
+            }
+          }
+        }
+      }
+    }
+
+    .rp_bottom{
+      border-top: 1px solid #E5E7EB;
+      margin-top: 24px;
+      padding-top: 19px;
+    }
+
+    .rp_status{
+      .rps_l{
+        width: 10px;
+        height: 10px;
+        border-radius: 50%;
+      }
+      .rps_r{
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        font-size: 14px;
+        line-height: 20px;
+        margin-left: 10px;
+      }
+    }
+  }
+</style>

+ 4 - 12
src/components/reportList/index.vue

@@ -10,27 +10,19 @@
             <p class="text"><span v-if="item.programName">{{ item.programName}} - </span>{{ item.enterpriseName||'' }}</p>
             <p class="tip">{{ item.title||'' }}</p>
           </div>
-          <div class="rr_pre rp2" v-if="!isTeam">
-            <p class="text">{{ item.realName||'' }}</p>
-            <p class="tip">姓名</p>
-          </div>
           <div class="rr_pre rp2">
             <p class="text">{{ item.teamName||'' }}</p>
             <p class="tip">团队类型</p>
           </div>
-          <div class="rr_pre rp3" v-if="isTeam">
-            <p class="text">{{ item.endTime||'' }}</p>
-            <p class="tip">截止日期</p>
-          </div>
-          <div class="rr_pre rp6" v-if="!isTeam">
+          <div class="rr_pre rp3">
             <p class="text">{{ item.endTime||'' }}</p>
             <p class="tip">截止日期</p>
           </div>
-          <div class="rr_pre rp4" v-if="isTeam">
+          <div class="rr_pre rp4">
             <p class="text">{{ item.finishNum||0 }}</p>
             <p class="tip">作答人数</p>
           </div>
-          <div class="rr_pre rp5" v-if="isTeam">
+          <div class="rr_pre rp5">
             <p class="text">{{ item.userNum||0 }}</p>
             <p class="tip">团队人数</p>
           </div>
@@ -58,7 +50,7 @@
                 <el-button link type="text" size="mini" @click="handleReive(scope.row)" v-if="[1,2].includes(scope.row.state)">预览</el-button>
                 <el-button link type="text" size="mini" @click="handledDelete(scope.row)" v-hasPermi="['core:report:delete']">删除</el-button>
                 <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-if="scope.row.state>0">发送报告</el-button>
-                <el-button link type="text" size="mini" @click="handleCreate(scope.row)" v-if="scope.row.state=='-1'">重新生成</el-button>
+                <el-button link type="text" size="mini" @click="handleCreate(scope.row)" v-if="scope.row.state=='-1'&&isTeam">重新生成</el-button>
                 <el-button link type="text" size="mini" @click="handleExport(scope.row)" v-if="scope.row.state>0">导出报告</el-button>
             </template>
         </el-table-column>

+ 2 - 2
src/components/reportPdf/pdf.vue

@@ -7,8 +7,8 @@
             </div>
             <img class="fm_img" src="@/assets/images/agent/logo4.png">
             <div class="fm_title">
-                <div class="pt_p">PERILL</div>
-                <div class="pt_name">团队诊断报告 教练版</div>
+                <div class="pt_p" style="font-size: 60px;">PERILL</div>
+                <div class="pt_name" style="font-size: 50px;">团队诊断报告-教练版</div>
                 <div class="pt_tip">{{ reportData?.cover?.title }}</div>
             </div>
             <div class="fm_pre adfac" style="margin-top: 165px;">

+ 5 - 5
src/views/modules/agent/company/teamUser.vue

@@ -36,7 +36,7 @@
                                 <div class="tr_btn" v-hasPermi="['sys:user:export']">导入成员</div>
                             </el-upload> 
                             <div class="tr_btn tb2" @click="handleAddUser" v-hasPermi="['sys:user:add']">添加成员</div>
-                            <div class="tr_btn tb2" @click="handleSendEmail">发送邮件</div>
+                            <div class="tr_btn tb2" v-hasPermi="['sys:teamuser:send']" @click="handleSendEmail">发送邮件</div>
                         </div>
                     </div>
                     <el-table ref="multipleTable" @selection-change="handleSelectionChange":data="userList" border cell-class-name="vertical-top-cell" v-loading="loading" empty-text="暂无人员" max-height="578px" style="margin-top: 16px;">
@@ -60,9 +60,9 @@
                         <el-table-column label="人物故事" prop="userStory" width="400" show-overflow-tooltip></el-table-column>
                         <el-table-column label="操作" width="180">
                             <template #default="scope">
-                                <el-button link type="text" size="mini" @click="handleEdit(scope.row)" v-hasPermi="['sys:user:update']">编辑</el-button>
-                                <el-button link type="text" size="mini" @click="handleDelete(scope.row)" v-hasPermi="['sys:user:delete']">删除</el-button>
-                                <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-hasPermi="['sys:user:delete']">发送邮件</el-button>
+                                <el-button link type="text" size="mini" @click="handleEdit(scope.row)" v-hasPermi="['sys:teamuser:update']">编辑</el-button>
+                                <el-button link type="text" size="mini" @click="handleDelete(scope.row)" v-hasPermi="['sys:teamuser:delete']">删除</el-button>
+                                <el-button link type="text" size="mini" @click="handleSend(scope.row)" v-hasPermi="['sys:teamuser:send']">发送邮件</el-button>
                             </template>
                         </el-table-column>
                     </el-table>
@@ -165,7 +165,7 @@
                 </el-row>
             </el-form>
             <div class="demo-drawer__footer" style="display: flex;justify-content: end;">
-                <el-button :loading="buttonLoading2" type="primary" @click="submitForm2" v-hasPermi="['sys:user:save']">保 存</el-button>
+                <el-button :loading="buttonLoading2" type="primary" @click="submitForm2" v-hasPermi="['sys:teamuser:save']">保 存</el-button>
                 <el-button @click="cancel2" style="margin-right: 5%;">取 消</el-button>
             </div>
         </el-drawer>

+ 361 - 0
src/views/modules/agent/report copy.vue

@@ -0,0 +1,361 @@
+<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>

+ 33 - 14
src/views/modules/agent/report.vue

@@ -10,8 +10,8 @@
             </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 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">
@@ -44,20 +44,31 @@
         </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 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" :isTeam="false"
                     v-for="(item, index) in personList" :key="index"
-                    @toggleReport="e=>toggleReportPerson(e,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>
+                <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>
     </div>
@@ -99,6 +110,12 @@
 
     const handleChangeTab = (idx) => {
         tidx.value = idx;
+        queryParams.value = {
+            page:1,
+            limit:2,
+            questionnaireId: '',
+            status: '',
+        }
         if(idx===1) getTeamList()
         else if(idx===2) getPersonList()
     }
@@ -117,7 +134,7 @@
         useCommonStore().$state.personIndex = idx;
         personList.value[idx].showMore = !personList.value[idx].showMore;
         if(personList.value[idx].showMore){
-            getPersonReportWjList(e.teamQuestionnaireId).then(res=>{
+            getPersonReportWjList(e.id).then(res=>{
                 if(res.code!==0) return proxy.$message.error(res.msg)
                 personList.value[idx].reportList = res.data;
             })
@@ -143,18 +160,20 @@
     }
     const handleSizeChange = e =>{
         queryParams.value.limit = e;
-        getTeamList();
+        if(tidx.value===1) getTeamList()
+        else if(tidx.value===2) getPersonList()
     }
     const handleCurrentChange = e =>{
         queryParams.value.page = e;
-        getTeamList();
+        if(tidx.value===1) getTeamList()
+        else if(tidx.value===2) getPersonList()
     }
     const getPersonList = (callback) => {
         personList.value = [];
-        let params = {...queryParams2.value}
-        getPersonQueList(params).then(res=>{
+        getTeamQuestionnaireList(queryParams.value).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 = res.data.list;
+            total.value = res.data.total;
             personList.value = personList.value.map(item=>{
                 return {
                     ...item,
@@ -284,7 +303,7 @@
             margin-top: 28px;
             border-bottom: 1px solid #E5E7EB;
             .t_pre{
-                width: 116px;
+                width: 156px;
                 padding-bottom: 18px;
                 position: relative;
                 font-family: PingFangSC, PingFang SC;
@@ -299,7 +318,7 @@
                     color: #761E6A;
                     &::after{
                         content: '';
-                        width: 116px;
+                        width: 156px;
                         height: 2px;
                         background: #761E6A;
                         position: absolute;