|
|
@@ -21,7 +21,7 @@
|
|
|
</el-select>
|
|
|
</div>
|
|
|
<div class="list">
|
|
|
- <el-table :data="dataList" border cell-class-name="vertical-top-cell" v-loading="loading" empty-text="暂无问卷" max-height="578px">
|
|
|
+ <el-table :data="dataList" row-key="id" :expand-row-keys="expandedReportRows" border cell-class-name="vertical-top-cell" v-loading="loading" empty-text="暂无问卷" max-height="578px">
|
|
|
<el-table-column label="序号" width="50">
|
|
|
<template #default="scope">
|
|
|
{{ scope.$index + 1 }}
|
|
|
@@ -34,13 +34,29 @@
|
|
|
{{ typecfg[scope.row.type]||'' }}
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column label="创建时间" prop="createDate"></el-table-column>
|
|
|
- <el-table-column label="操作" width="200">
|
|
|
- <template #default="scope">
|
|
|
+ <el-table-column label="创建时间" prop="createDate"></el-table-column>
|
|
|
+ <el-table-column type="expand" width="1">
|
|
|
+ <template #default="scope">
|
|
|
+ <div v-loading="scope.row.reportLoading">
|
|
|
+ <reportList
|
|
|
+ v-for="(item, index) in scope.row.reportEntries"
|
|
|
+ :key="item.id"
|
|
|
+ :item="item"
|
|
|
+ :reportList="item.reportList"
|
|
|
+ :showMore="item.showMore"
|
|
|
+ @toggleReport="item.showMore = !item.showMore; item.showMore && refreshReportEntry(index)"
|
|
|
+ @refreshReportList="refreshReportEntry(index)">
|
|
|
+ </reportList>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="操作" width="260">
|
|
|
+ <template #default="scope">
|
|
|
<el-button link type="text" size="mini" @click="handleEdit(scope.row)" v-hasPermi="['core:questionnaire:update']">编辑</el-button>
|
|
|
<el-button link type="text" size="mini" @click="handleRelease(scope.row)" v-hasPermi="['core:questionnaire:publish']">发布问卷</el-button>
|
|
|
- <el-button link type="text" size="mini" @click="handleDetail(scope.row)" v-hasPermi="['core:questionnairedetail:info']">详情</el-button>
|
|
|
- <el-button link type="text" size="mini" @click="handleDelete(scope.row)" v-hasPermi="['core:questionnaire:delete']">删除</el-button>
|
|
|
+ <el-button link type="text" size="mini" @click="handleDetail(scope.row)" v-hasPermi="['core:questionnairedetail:info']">详情</el-button>
|
|
|
+ <el-button link type="text" size="mini" @click="toggleReportList(scope.row)">报告列表</el-button>
|
|
|
+ <el-button link type="text" size="mini" @click="handleDelete(scope.row)" v-hasPermi="['core:questionnaire:delete']">删除</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
@@ -104,11 +120,12 @@
|
|
|
|
|
|
<script setup name="">
|
|
|
import Cookies from "js-cookie"
|
|
|
- import { ref, getCurrentInstance, onMounted } from 'vue'
|
|
|
+ import { ref, getCurrentInstance, onMounted } from 'vue'
|
|
|
+ import reportList from '@/components/reportList/index.vue'
|
|
|
const { proxy } = getCurrentInstance();
|
|
|
const uploadUrl = `${window.SITE_CONFIG["apiURL"]}/sys/oss/uploadFile`
|
|
|
const uploadHeaders = {token:Cookies.get("token")};
|
|
|
- import { getQuestionnaireList, addQuestionnaire, updateQuestionnaire, deleteQuestionnaire } from '@/api/agent/index.js'
|
|
|
+ import { getQuestionnaireList, addQuestionnaire, updateQuestionnaire, deleteQuestionnaire, getTeamQuestionnaireList, getTeamReportWjList } from '@/api/agent/index.js'
|
|
|
|
|
|
const queryParams = ref({
|
|
|
page:1,
|
|
|
@@ -124,7 +141,9 @@
|
|
|
4: '中级',
|
|
|
5: '初级'
|
|
|
}
|
|
|
- const dataList = ref([])
|
|
|
+ const dataList = ref([])
|
|
|
+ const expandedReportRows = ref([])
|
|
|
+ const currentReportRow = ref(null)
|
|
|
const total = ref(0)
|
|
|
const loading = ref(false)
|
|
|
const show = ref(false)
|
|
|
@@ -235,14 +254,50 @@
|
|
|
proxy?.$refs.wjRef.resetFields();
|
|
|
}
|
|
|
|
|
|
- const getList = async () => {
|
|
|
+ const getList = async () => {
|
|
|
let query = {...queryParams.value};
|
|
|
loading.value = true;
|
|
|
const res = await getQuestionnaireList(query);
|
|
|
- dataList.value = res.data.list;
|
|
|
+ dataList.value = res.data.list.map(prepareQuestionnaireRow);
|
|
|
total.value = res.data.total;
|
|
|
loading.value = false;
|
|
|
- }
|
|
|
+ }
|
|
|
+ const prepareQuestionnaireRow = row => ({
|
|
|
+ ...row,
|
|
|
+ reportExpanded: false,
|
|
|
+ reportEntries: [],
|
|
|
+ reportLoading: false
|
|
|
+ })
|
|
|
+ const loadReportEntries = async row => {
|
|
|
+ row.reportLoading = true
|
|
|
+ currentReportRow.value = row
|
|
|
+ try {
|
|
|
+ const res = await getTeamQuestionnaireList({ page: 1, limit: 100, questionnaireId: row.id })
|
|
|
+ if (res.code !== 0) return proxy.$message.error(res.msg)
|
|
|
+ row.reportEntries = res.data.list.map(entry => ({
|
|
|
+ ...entry,
|
|
|
+ showMore: false,
|
|
|
+ reportList: []
|
|
|
+ }))
|
|
|
+ } finally {
|
|
|
+ row.reportLoading = false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const toggleReportList = async row => {
|
|
|
+ row.reportExpanded = !row.reportExpanded
|
|
|
+ currentReportRow.value = row
|
|
|
+ expandedReportRows.value = row.reportExpanded ? [row.id] : []
|
|
|
+ if (row.reportExpanded && row.reportEntries.length === 0) {
|
|
|
+ await loadReportEntries(row)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const refreshReportEntry = async index => {
|
|
|
+ const entry = currentReportRow.value?.reportEntries[index]
|
|
|
+ if (!entry) return
|
|
|
+ const res = await getTeamReportWjList(entry.id)
|
|
|
+ if (res.code !== 0) return proxy.$message.error(res.msg)
|
|
|
+ entry.reportList = res.data
|
|
|
+ }
|
|
|
const handleSizeChange = (e)=>{
|
|
|
queryParams.value.limit = e;
|
|
|
getList();
|