123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- import MHeader from '@/components/m-header';
- import MSticky from '@/components/m-sticky';
- import {
- CellGroup,
- DropdownItem,
- DropdownMenu,
- List,
- Skeleton,
- Tab,
- Tabs
- } from 'vant';
- import { defineComponent, onMounted, reactive, ref } from 'vue';
- import styles from './index.module.less';
- import MFullRefresh from '@/components/m-full-refresh';
- import ListItem from './list-item';
- import SkeletionItem from './skeletion-item';
- import MEmpty from '@/components/m-empty';
- import MSearch from '@/components/m-search';
- import DropDownModal from '../site-management/drop-down-modal';
- import { musicGroupQuitQueryPage } from './api';
- import { MusicGroupQuitPageDto } from './schedule';
- import { useRouter } from 'vue-router';
- export default defineComponent({
- name: 'schedule-manage',
- setup() {
- const router = useRouter();
- const todoData = reactive({
- examineLoading: true,
- refreshLoading: false,
- examineFinish: false,
- /** 待审批列表 */
- examineList: [] as MusicGroupQuitPageDto[],
- examinePage: {
- page: 1,
- rows: 20
- },
- examineSkelet: true,
- /** 完成列表 */
- completeList: [] as MusicGroupQuitPageDto[],
- completePage: {
- page: 1,
- rows: 20
- },
- completeResh: false,
- completeLoading: false,
- completeSkelet: true,
- completeFinish: false,
- completeActive: '',
- completeColumns: [{ text: '全部活动', value: '' }],
- options: [
- { text: '全部状态', value: '' },
- { text: '已通过', value: 'PASS' },
- { text: '未通过', value: 'REJECT' }
- ],
- optionTitle: '全部状态',
- activeOption: '' as any,
- search: ''
- });
- const getExamine = async () => {
- console.log('请求');
- todoData.examineLoading = true;
- if (todoData.refreshLoading) {
- todoData.examineList = [];
- }
- musicGroupQuitQueryPage({
- page: todoData.examinePage.page,
- rows: todoData.examinePage.rows
- })
- .then(res => {
- const rows: MusicGroupQuitPageDto[] = Array.isArray(res?.data?.rows)
- ? res.data.rows
- : [];
- todoData.examineList = todoData.examineList.concat(rows);
- if (!rows.length) {
- todoData.examineFinish = true;
- }
- })
- .catch(() => {
- todoData.examineFinish = true;
- })
- .finally(() => {
- todoData.examineLoading = false;
- setTimeout(() => {
- todoData.refreshLoading = false;
- todoData.examineSkelet = false;
- }, 500);
- });
- };
- const getComplete = () => {
- console.log('请求');
- todoData.completeLoading = true;
- musicGroupQuitQueryPage({
- page: todoData.examinePage.page,
- rows: todoData.examinePage.rows,
- search: todoData.search,
- status: todoData.activeOption
- })
- .then(res => {
- if (todoData.completeResh){
- todoData.completeList = []
- }
- const rows: MusicGroupQuitPageDto[] = Array.isArray(res?.data?.rows)
- ? res.data.rows
- : [];
- todoData.completeList = todoData.completeList.concat(rows);
- if (!rows.length) {
- todoData.completeFinish = true;
- }
- })
- .catch(() => {
- todoData.completeFinish = true;
- })
- .finally(() => {
- todoData.completeLoading = false;
- setTimeout(() => {
- todoData.completeResh = false;
- todoData.completeSkelet = false;
- }, 500);
- });
- };
- onMounted(() => {
- getExamine();
- getComplete();
- });
- /** 下载菜单改变 */
- const changeDropTitle = (option: any) => {
- // console.log(option, todoData.activeOption);
- todoData.optionTitle =
- todoData.activeOption === 'PASS'
- ? '已通过'
- : todoData.activeOption === 'REJECT'
- ? '未通过'
- : '全部状态';
- };
- /** 去详情页 */
- const handleGoto = (item: MusicGroupQuitPageDto) => {
- router.push({
- path: 'schedule-manage-detail',
- query: {
- musicGroupQuitId: item.musicGroupQuitId
- }
- });
- };
- return () => (
- <div class={styles['schedule-manage']}>
- <MSticky position="top">
- <MHeader></MHeader>
- </MSticky>
- <Tabs swipeable animated>
- <Tab name="待审批" title="待审批">
- <List
- loading={todoData.examineLoading}
- finished={todoData.examineFinish}
- class={styles.list}
- onLoad={getExamine}>
- <MFullRefresh
- v-model:modelValue={todoData.refreshLoading}
- onRefresh={() => {
- todoData.examinePage.page = 1;
- todoData.examineFinish = false;
- getExamine();
- }}>
- {todoData.examineSkelet && (
- <div class={[styles.list, styles.listHide]}>
- <Skeleton loading={true}>
- {{
- template: () => (
- <div style={{ width: '100%' }}>
- {new Array(10).fill(1).map((item: any) => (
- <SkeletionItem />
- ))}
- </div>
- )
- }}
- </Skeleton>
- </div>
- )}
- {todoData.examineList.map((item: MusicGroupQuitPageDto) => (
- <ListItem status="success" onGoto={() => handleGoto(item)} />
- ))}
- {!todoData.examineList.length && (
- <MEmpty
- description="暂无数据"
- style={{
- minHeight: '100%'
- }}
- />
- )}
- </MFullRefresh>
- </List>
- </Tab>
- <Tab name="已完成" title="已完成">
- <div class={styles.menubox}>
- <DropdownMenu>
- <DropdownItem
- teleport="body"
- title={todoData.optionTitle}
- v-model={todoData.activeOption}
- options={todoData.options}
- onChange={changeDropTitle}
- />
- </DropdownMenu>
- <MSearch
- placeholder="请输入学员名称"
- v-model:modelValue={todoData.search}
- onSearch={() => {
- todoData.examinePage.page = 1;
- todoData.completeFinish = false;
- getComplete();
- }}
- />
- </div>
- <List
- loading={todoData.completeLoading}
- finished={todoData.completeFinish}
- class={styles.list}
- onLoad={getComplete}>
- <MFullRefresh
- v-model:modelValue={todoData.completeResh}
- onRefresh={() => {
- todoData.examinePage.page = 1;
- todoData.completeFinish = false;
- getComplete();
- }}>
- {todoData.completeSkelet && (
- <div class={[styles.list, styles.listHide]}>
- <Skeleton loading={true}>
- {{
- template: () => (
- <div style={{ width: '100%' }}>
- {new Array(10).fill(1).map((item: any) => (
- <SkeletionItem />
- ))}
- </div>
- )
- }}
- </Skeleton>
- </div>
- )}
- {todoData.completeList.map((item: any) => (
- <ListItem status="success" />
- ))}
- {!todoData.examineList.length && (
- <MEmpty
- description="暂无数据"
- style={{
- minHeight: '100%'
- }}
- />
- )}
- </MFullRefresh>
- </List>
- </Tab>
- </Tabs>
- </div>
- );
- }
- });
|