|
@@ -1,13 +1,17 @@
|
|
-import { PropType, defineComponent, onMounted, reactive } from 'vue';
|
|
|
|
|
|
+import { PropType, computed, defineComponent, onMounted, reactive } from 'vue';
|
|
import {
|
|
import {
|
|
IApiUserPaymentOrderPage,
|
|
IApiUserPaymentOrderPage,
|
|
api_userPaymentOrderPage,
|
|
api_userPaymentOrderPage,
|
|
|
|
+ api_userPaymentOrderStudentRefundOrderPage,
|
|
|
|
+ type_OrderStatus
|
|
} from '../api';
|
|
} from '../api';
|
|
import Item from './item';
|
|
import Item from './item';
|
|
import MFullRefresh from '@/components/m-full-refresh';
|
|
import MFullRefresh from '@/components/m-full-refresh';
|
|
-import { List, showToast } from 'vant';
|
|
|
|
|
|
+import { Button, DatePicker, List, Popup, showToast } from 'vant';
|
|
import MEmpty from '@/components/m-empty';
|
|
import MEmpty from '@/components/m-empty';
|
|
import ItemSkelete from './item-skelete';
|
|
import ItemSkelete from './item-skelete';
|
|
|
|
+import icon_arrow from '../image/icon_arrow.svg';
|
|
|
|
+import styles from './list.module.less';
|
|
|
|
|
|
export default defineComponent({
|
|
export default defineComponent({
|
|
name: 'collection-record-list',
|
|
name: 'collection-record-list',
|
|
@@ -18,26 +22,86 @@ export default defineComponent({
|
|
}
|
|
}
|
|
},
|
|
},
|
|
setup(props) {
|
|
setup(props) {
|
|
|
|
+ const time = new Date();
|
|
const data = reactive({
|
|
const data = reactive({
|
|
page: 1,
|
|
page: 1,
|
|
|
|
+ dateTime: [
|
|
|
|
+ time.getFullYear().toString(),
|
|
|
|
+ (time.getMonth() + 1).toString().padStart(2, '0')
|
|
|
|
+ ],
|
|
|
|
+ minDate: new Date(time.getFullYear(), 0, 1),
|
|
|
|
+ maxDate: new Date(time.getFullYear() + 10, 5, 1),
|
|
|
|
+
|
|
list: [],
|
|
list: [],
|
|
skelete: true,
|
|
skelete: true,
|
|
refreshing: false,
|
|
refreshing: false,
|
|
finished: false,
|
|
finished: false,
|
|
- loading: false
|
|
|
|
|
|
+ loading: false,
|
|
|
|
+
|
|
|
|
+ dataOpen: false
|
|
});
|
|
});
|
|
|
|
+ const statusTypes: { [_: string]: string } = {
|
|
|
|
+ WAIT_PAY: '待领取',
|
|
|
|
+ PAYING: '待领取',
|
|
|
|
+ PAID: '领取成功',
|
|
|
|
+ CLOSED: '已关闭'
|
|
|
|
+ };
|
|
|
|
+ const statusColors: { [_: string]: string } = {
|
|
|
|
+ WAIT_PAY: 'rgba(64, 196, 203, 1)',
|
|
|
|
+ PAYING: 'rgba(64, 196, 203, 1)',
|
|
|
|
+ PAID: 'rgba(28, 172, 241, 1)',
|
|
|
|
+ CLOSED: 'rgba(170, 170, 170, 1)',
|
|
|
|
+ ING: 'rgba(153, 153, 153, 1)',
|
|
|
|
+ REJECT: 'rgba(255, 90, 86, 1)',
|
|
|
|
+ PASS: 'rgba(255, 162, 68, 1)'
|
|
|
|
+ };
|
|
|
|
+ const refundTypes: { [_: string]: string } = {
|
|
|
|
+ ING: '退回申请中',
|
|
|
|
+ REJECT: '退回失败',
|
|
|
|
+ PASS: '退回成功',
|
|
|
|
+ CLOSED: '退回关闭'
|
|
|
|
+ };
|
|
const getList = async () => {
|
|
const getList = async () => {
|
|
data.loading = true;
|
|
data.loading = true;
|
|
- const res = await api_userPaymentOrderPage({
|
|
|
|
- page: data.page,
|
|
|
|
- rows: 10,
|
|
|
|
- orderStatus: props.orderStatus,
|
|
|
|
- paymentYear: ''
|
|
|
|
- });
|
|
|
|
- if (res?.code === 200 && Array.isArray(res?.data?.rows)) {
|
|
|
|
- data.list = res.data.rows;
|
|
|
|
- data.finished = !res.data.next;
|
|
|
|
|
|
+ let res = {} as any;
|
|
|
|
+ if (props.orderStatus === 'REFUNDED') {
|
|
|
|
+ res = await api_userPaymentOrderStudentRefundOrderPage({
|
|
|
|
+ page: data.page,
|
|
|
|
+ rows: 10,
|
|
|
|
+ refundMonth: data.dateTime.join('-')
|
|
|
|
+ });
|
|
|
|
+ if (res?.code === 200 && Array.isArray(res?.data?.rows)) {
|
|
|
|
+ data.list = res.data.rows.map((item: any) => {
|
|
|
|
+ return {
|
|
|
|
+ ...item,
|
|
|
|
+ createTime: item.refundTime,
|
|
|
|
+ statusName: refundTypes[item.refundAudit],
|
|
|
|
+ statusColor: statusColors[item.status]
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ data.finished = !res.data.next;
|
|
|
|
+ data.page = data.page + 1;
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ res = await api_userPaymentOrderPage({
|
|
|
|
+ page: data.page,
|
|
|
|
+ rows: 10,
|
|
|
|
+ orderStatus: props.orderStatus,
|
|
|
|
+ paymentYear: data.dateTime[0]
|
|
|
|
+ });
|
|
|
|
+ if (res?.code === 200 && Array.isArray(res?.data?.rows)) {
|
|
|
|
+ data.list = res.data.rows.map((item: any) => {
|
|
|
|
+ return {
|
|
|
|
+ ...item,
|
|
|
|
+ statusName: statusTypes[item.status],
|
|
|
|
+ statusColor: statusColors[item.status]
|
|
|
|
+ };
|
|
|
|
+ });
|
|
|
|
+ data.finished = !res.data.next;
|
|
|
|
+ data.page = data.page + 1;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
setTimeout(() => {
|
|
setTimeout(() => {
|
|
data.refreshing = false;
|
|
data.refreshing = false;
|
|
}, 500);
|
|
}, 500);
|
|
@@ -47,32 +111,65 @@ export default defineComponent({
|
|
onMounted(() => {
|
|
onMounted(() => {
|
|
getList();
|
|
getList();
|
|
});
|
|
});
|
|
|
|
+
|
|
|
|
+ const handlStart = () => {
|
|
|
|
+ data.finished = false;
|
|
|
|
+ data.page = 1;
|
|
|
|
+ getList();
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const timeName = computed(() => {
|
|
|
|
+ return `${data.dateTime[0]}年${data.dateTime[1]}月`;
|
|
|
|
+ });
|
|
return () => (
|
|
return () => (
|
|
- <MFullRefresh
|
|
|
|
- modelValue={data.refreshing}
|
|
|
|
- onRefresh={() => {
|
|
|
|
- data.refreshing = true;
|
|
|
|
- data.finished = false;
|
|
|
|
- console.log('下拉');
|
|
|
|
- getList();
|
|
|
|
- }}>
|
|
|
|
- {data.skelete && new Array(5).fill(1).map(i => <ItemSkelete />)}
|
|
|
|
|
|
+ <>
|
|
|
|
+ <MFullRefresh
|
|
|
|
+ modelValue={data.refreshing}
|
|
|
|
+ onRefresh={() => {
|
|
|
|
+ data.refreshing = true;
|
|
|
|
+ console.log('下拉');
|
|
|
|
+ handlStart();
|
|
|
|
+ }}>
|
|
|
|
+ <Button
|
|
|
|
+ class={styles.downBtn}
|
|
|
|
+ size="small"
|
|
|
|
+ round
|
|
|
|
+ onClick={() => (data.dataOpen = true)}>
|
|
|
|
+ <div>{timeName.value}</div>
|
|
|
|
+ <img class={styles.downIcon} src={icon_arrow} />
|
|
|
|
+ </Button>
|
|
|
|
+ {data.skelete && new Array(5).fill(1).map(i => <ItemSkelete />)}
|
|
|
|
|
|
- {data.list.length !== 0 && (
|
|
|
|
- <List
|
|
|
|
- loading={data.loading}
|
|
|
|
- finished={data.finished}
|
|
|
|
- finishedText=" ">
|
|
|
|
- {data.list.map(item => {
|
|
|
|
- return <Item item={item} />;
|
|
|
|
- })}
|
|
|
|
- </List>
|
|
|
|
- )}
|
|
|
|
|
|
+ {data.list.length !== 0 && (
|
|
|
|
+ <List
|
|
|
|
+ loading={data.loading}
|
|
|
|
+ finished={data.finished}
|
|
|
|
+ finishedText=" ">
|
|
|
|
+ {data.list.map(item => {
|
|
|
|
+ return <Item item={item} onClose={() => handlStart()} />;
|
|
|
|
+ })}
|
|
|
|
+ </List>
|
|
|
|
+ )}
|
|
|
|
|
|
- {!data.skelete && data.list.length === 0 && (
|
|
|
|
- <MEmpty description="暂无记录" />
|
|
|
|
- )}
|
|
|
|
- </MFullRefresh>
|
|
|
|
|
|
+ {!data.skelete && data.list.length === 0 && (
|
|
|
|
+ <MEmpty description="暂无记录" />
|
|
|
|
+ )}
|
|
|
|
+ </MFullRefresh>
|
|
|
|
+ <Popup teleport="body" v-model:show={data.dataOpen} position="bottom">
|
|
|
|
+ <DatePicker
|
|
|
|
+ v-model={data.dateTime}
|
|
|
|
+ title="选择年月"
|
|
|
|
+ columnsType={['year', 'month']}
|
|
|
|
+ minDate={data.minDate}
|
|
|
|
+ maxDate={data.maxDate}
|
|
|
|
+ onConfirm={() => {
|
|
|
|
+ data.dataOpen = false;
|
|
|
|
+ console.log(data.dateTime);
|
|
|
|
+ handlStart();
|
|
|
|
+ }}
|
|
|
|
+ />
|
|
|
|
+ </Popup>
|
|
|
|
+ </>
|
|
);
|
|
);
|
|
}
|
|
}
|
|
});
|
|
});
|