|
@@ -0,0 +1,202 @@
|
|
|
+import { defineComponent, onMounted, reactive, ref } from 'vue';
|
|
|
+import styles from './index.module.less';
|
|
|
+import MSticky from '@/components/m-sticky';
|
|
|
+import MHeader from '@/components/m-header';
|
|
|
+import MSearch from '@/components/m-search';
|
|
|
+import {
|
|
|
+ Cell,
|
|
|
+ CellGroup,
|
|
|
+ DropdownItem,
|
|
|
+ DropdownMenu,
|
|
|
+ Icon,
|
|
|
+ List,
|
|
|
+ Tag
|
|
|
+} from 'vant';
|
|
|
+import DropDownModal from '../site-management/drop-down-modal';
|
|
|
+import { activityStatus } from '@/helpers/constant';
|
|
|
+import SkeletionIndexModal from './skeletion-index.modal';
|
|
|
+import MFullRefresh from '@/components/m-full-refresh';
|
|
|
+import MEmpty from '@/components/m-empty';
|
|
|
+import request from '@/helpers/request';
|
|
|
+import iconAdd from '@/common/images/icon-add.png';
|
|
|
+import { useRouter } from 'vue-router';
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'activtiy-record',
|
|
|
+ setup() {
|
|
|
+ const router = useRouter();
|
|
|
+ const dropDownRef = ref();
|
|
|
+ const forms = reactive({
|
|
|
+ activeValue: '',
|
|
|
+ activeColumns: [{ text: '全部活动', value: '' }], //
|
|
|
+ isClick: false,
|
|
|
+ listState: {
|
|
|
+ dataShow: true, // 判断是否有数据
|
|
|
+ loading: true,
|
|
|
+ finished: false,
|
|
|
+ refreshing: false
|
|
|
+ },
|
|
|
+ params: {
|
|
|
+ page: 1,
|
|
|
+ rows: 20
|
|
|
+ },
|
|
|
+ list: []
|
|
|
+ });
|
|
|
+ const onDropDownClose = (item: any) => {
|
|
|
+ item.value && item.value.toggle();
|
|
|
+ };
|
|
|
+ const formatName = () => {
|
|
|
+ let name = '';
|
|
|
+ forms.activeColumns.forEach((item: any) => {
|
|
|
+ if (forms.activeValue === item.value) {
|
|
|
+ name = item.text;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return name;
|
|
|
+ };
|
|
|
+
|
|
|
+ const getList = async () => {
|
|
|
+ try {
|
|
|
+ if (forms.isClick) return;
|
|
|
+ forms.isClick = true;
|
|
|
+ const { data } = await request.post('/api-web/schoolActivity/page', {
|
|
|
+ data: forms.params
|
|
|
+ });
|
|
|
+ const result = data || {};
|
|
|
+ // 处理重复请求数据
|
|
|
+ if (forms.list.length > 0 && result.pageNo === 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ // 判断是否有数据
|
|
|
+ if (forms.listState.refreshing) {
|
|
|
+ forms.list = result.rows || [];
|
|
|
+ } else {
|
|
|
+ forms.list = forms.list.concat(result.rows || []);
|
|
|
+ }
|
|
|
+
|
|
|
+ forms.listState.finished = result.pageNo >= result.totalPage;
|
|
|
+ forms.params.page = result.pageNo + 1;
|
|
|
+ } catch {
|
|
|
+ forms.listState.finished = true;
|
|
|
+ } finally {
|
|
|
+ forms.listState.dataShow = forms.list.length > 0;
|
|
|
+ forms.listState.refreshing = false;
|
|
|
+ forms.listState.loading = false;
|
|
|
+ forms.isClick = false;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ const onRefresh = () => {
|
|
|
+ forms.params.page = 1;
|
|
|
+ getList();
|
|
|
+ };
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ for (const key in activityStatus) {
|
|
|
+ if (Object.prototype.hasOwnProperty.call(activityStatus, key)) {
|
|
|
+ forms.activeColumns.push({
|
|
|
+ text: activityStatus[key],
|
|
|
+ value: key
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ getList();
|
|
|
+ });
|
|
|
+ return () => (
|
|
|
+ <div class={styles['activity-record']}>
|
|
|
+ <MSticky position="top">
|
|
|
+ <MHeader>
|
|
|
+ {{
|
|
|
+ right: () => (
|
|
|
+ <Icon
|
|
|
+ name={iconAdd}
|
|
|
+ class={styles.iconAdd}
|
|
|
+ onClick={() => {
|
|
|
+ router.push('activity-record-operation');
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </MHeader>
|
|
|
+ <MSearch placeholder="请输入活动名称">
|
|
|
+ {{
|
|
|
+ left: () => (
|
|
|
+ <DropdownMenu
|
|
|
+ class={styles.patrolDetailDropDown}
|
|
|
+ closeOnClickOutside={false}>
|
|
|
+ <DropdownItem title={formatName()} ref={dropDownRef}>
|
|
|
+ <DropDownModal
|
|
|
+ selectValues={forms.activeValue}
|
|
|
+ columns={forms.activeColumns}
|
|
|
+ open={dropDownRef.value.state.showPopup}
|
|
|
+ onDropDownClose={() => onDropDownClose(dropDownRef)}
|
|
|
+ onDropDownConfirm={(values: any) => {
|
|
|
+ forms.activeValue = values[0];
|
|
|
+ onDropDownClose(dropDownRef);
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ </DropdownItem>
|
|
|
+ </DropdownMenu>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </MSearch>
|
|
|
+ </MSticky>
|
|
|
+
|
|
|
+ <SkeletionIndexModal v-model:show={forms.listState.loading}>
|
|
|
+ <MFullRefresh
|
|
|
+ v-model:modelValue={forms.listState.refreshing}
|
|
|
+ onRefresh={() => onRefresh()}
|
|
|
+ style={{
|
|
|
+ minHeight: `calc(100vh - var(--header-height))`
|
|
|
+ }}>
|
|
|
+ <List
|
|
|
+ finished={forms.listState.finished}
|
|
|
+ finishedText=" "
|
|
|
+ style={{ overflow: 'hidden' }}
|
|
|
+ onLoad={getList}
|
|
|
+ immediateCheck={false}>
|
|
|
+ {forms.listState.dataShow ? (
|
|
|
+ forms.list.map(() => (
|
|
|
+ <CellGroup inset class={styles.cellGroup}>
|
|
|
+ <Cell
|
|
|
+ center
|
|
|
+ isLink
|
|
|
+ class={styles.cellTitle}
|
|
|
+ clickable={false}>
|
|
|
+ {{
|
|
|
+ icon: () => (
|
|
|
+ <Tag plain type="primary" class={styles.tag}>
|
|
|
+ 泥泞
|
|
|
+ </Tag>
|
|
|
+ ),
|
|
|
+ title: () => (
|
|
|
+ <div class={[styles.title, 'van-ellipsis']}>
|
|
|
+ 武汉小学23年元旦晚会武汉小学23年元旦晚会武汉小学23年元旦晚会
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }}
|
|
|
+ </Cell>
|
|
|
+ <Cell
|
|
|
+ class={styles.cellTimer}
|
|
|
+ center
|
|
|
+ title={'活动日期:2022年12月10日'}
|
|
|
+ value={'进行中'}
|
|
|
+ valueClass={styles.ing}></Cell>
|
|
|
+ </CellGroup>
|
|
|
+ ))
|
|
|
+ ) : (
|
|
|
+ <MEmpty
|
|
|
+ style={{
|
|
|
+ minHeight: `calc(100vh - var(--header-height))`
|
|
|
+ }}
|
|
|
+ description="暂无数据"
|
|
|
+ />
|
|
|
+ )}
|
|
|
+ </List>
|
|
|
+ </MFullRefresh>
|
|
|
+ </SkeletionIndexModal>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+ }
|
|
|
+});
|