import { PropType, defineComponent, onMounted, reactive, ref } from 'vue'; import styles from './suggestion-list.module.less'; import { NInput, NSelect, NScrollbar, NSpin, NThing, NImageGroup, NSpace, NImage, NButton } from 'naive-ui'; import { batchSetRead, getSysSuggestionList } from './api'; import CDatePicker from '../../CDatePicker'; import TheEmpty from '../../TheEmpty'; import { useDebounceFn, useThrottleFn } from '@vueuse/core'; import { eventGlobal, getTimes } from '/src/utils'; export default defineComponent({ name: 'suggestion-list', props: { typeList: { type: Array as PropType, default: () => [] } }, setup(props) { const state = reactive({ suggestionTypeList: [] as any, loading: false, finshed: false, // 是否加载完 pagination: { page: 1, rows: 20 }, searchGroup: { suggestionTypeId: null, timer: null as any }, tableList: [] as any, show: false, item: {} as any }); const getList = async () => { try { if (state.pagination.page === 1) { state.loading = true; } const { timer, ...res } = state.searchGroup; const { data } = await getSysSuggestionList({ ...state.searchGroup, ...res, ...getTimes(timer, ['startTime', 'endTime']) }); state.loading = false; const tempRows = data.rows || []; tempRows.forEach((row: any) => { const imgList = (row.attachmentUrls && row.attachmentUrls.split(',')) || []; row.imgList = imgList; }); if (state.pagination.page === 1) { state.tableList = tempRows; } else { state.tableList.push(...tempRows); } state.finshed = data.pages <= data.current ? true : false; } catch { state.loading = false; } }; const throttledFnSearch = useDebounceFn(item => { state.pagination.page = state.pagination.page + 1; state.pagination.page = 1; state.tableList = []; state.searchGroup = Object.assign(state.searchGroup, item); getList(); }, 100); const throttledFn = useThrottleFn(() => { state.pagination.page = state.pagination.page + 1; getList(); }, 500); const getBatchSetRead = async () => { try { await batchSetRead({ messageType: 'SYS_SUGGEST_FEEDBACK_TEACHER' }); eventGlobal.emit('onSuggestionRead'); } catch { // } }; onMounted(() => { props.typeList.forEach((item: any) => { state.suggestionTypeList.push({ label: item.name, value: item.id }); }); getBatchSetRead(); getList(); }); return () => (
搜索
{ const clientHeight = e.target?.clientHeight; const scrollTop = e.target?.scrollTop; const scrollHeight = e.target?.scrollHeight; // 是否到底,是否加载完 if ( clientHeight + scrollTop + 20 >= scrollHeight && !state.finshed && !state.loading ) { throttledFn(); } }}>
{state.tableList.map((item: any) => (
反馈类型: {item.suggestionTypeName}
反馈内容: {item.content}
{item.imgList && item.imgList.length > 0 && (
{item.imgList?.map((item: any, index: number) => ( ))}
)} {item.handleStatus && (
处理结果: {item.handleAttitude === 'NO' ? '感谢你对音乐数字课堂的关注与支持,我们会认真处理您的反馈,尽快修复和完善相关功能!' : item.feedbackContent}
)}
))} {!state.loading && state.tableList.length <= 0 && }
); } });