Files
gxtyzx-admin/src/views/booking/finance/index.vue
T
weicw 0ed0f3b7c8 fix: 修复阻断打包的失效引用与生成器残留
`pnpm build` 暴露四处历史遗留问题,均与包管理器无关:

- thinkGatePassreord 模型里混入 Java 注解 `@TableField`,esbuild 报
  Unexpected "@";顺带清掉同文件尾随空格
- booking/finance 与 oa/task/detail 的 import 大小写与磁盘文件名不符
  (OrderList.vue / Help.vue),Linux 下无法解析
- cms/form 视图 import 了从未入库的 search.vue / form-edit.vue,
  两者在模板中均未使用(FormEdit 的使用处早已注释),予以移除
2026-10-31 13:17:07 +08:00

362 lines
9.9 KiB
Vue

<template>
<div class="page">
<div class="ele-body">
<a-card :bordered="false" :body-style="{ padding: '16px' }">
<a-space style="margin-bottom: 1rem">
<a-button @click="changeType(0)" :type="type === 0 ? 'primary' : ''">
收款汇总表
</a-button>
<a-button @click="changeType(1)" :type="type === 1 ? 'primary' : ''">
收入日报表及汇总表
</a-button>
<a-button @click="changeType(2)" :type="type === 2 ? 'primary' : ''">
培训业务报表
</a-button>
</a-space>
<a-spin :spinning="loading">
<search @search="searchData" @reload="reload" :type="type" />
<a-table
v-if="type === 0"
:scroll="{ y: tableHeight }"
:data-source="incomeList"
:columns="columns"
:pagination="false"
/>
<a-table
v-else-if="type === 1"
:scroll="{ y: tableHeight }"
:data-source="cardList"
:columns="columns1"
:pagination="false"
/>
<training-business-report v-else :sections="trainingSections" />
</a-spin>
</a-card>
</div>
<OrderList
v-model:visible="showList"
v-if="showList"
:pay-type="payTypeList"
:sid="sid"
:showType="showType"
:showCardType="showCardType"
:type="type"
:isPayTime="type === 0"
:create-time-start="createTimeStart"
:wechat-order="wechatOrder"
:create-time-end="createTimeEnd"
/>
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import type { ColumnItem } from 'ele-admin-pro/es/ele-pro-table/types';
import Search from './components/search.vue';
import TrainingBusinessReport from './components/trainingBusinessReport.vue';
import {
getThinkOrderExcelData,
getThinkOrderExcelDataForCard,
getThinkOrderTrainingBusinessData
} from '@/api/think/thinkOrder';
import type {
ThinkOrderParam,
ThinkTrainingBusinessSection
} from '@/api/think/thinkOrder/model';
import OrderList from './components/orderList.vue';
import dayjs from 'dayjs';
const loading = ref(true);
const showType = ref(false);
const showCardType = ref(false);
const type = ref<number>(0);
const tableHeight = document.body.clientHeight - 330;
const createTimeStart = ref();
const createTimeEnd = ref();
const incomeList = ref<any[]>([]);
const cardList = ref<any[]>([]);
const trainingSections = ref<ThinkTrainingBusinessSection[]>([]);
const sid = ref<number>(0);
const wechatOrder = ref<string>('');
const payTypeList = ref<number[]>([]);
const showList = ref(false);
const getList = async () => {
loading.value = true;
incomeList.value = [];
cardList.value = [];
trainingSections.value = [];
const params = {
createTimeStart: createTimeStart.value
? dayjs(createTimeStart.value).unix()
: undefined,
createTimeEnd: createTimeEnd.value
? dayjs(createTimeEnd.value).unix()
: undefined
};
if (type.value === 0) {
incomeList.value = await getThinkOrderExcelData(params);
} else if (type.value === 1) {
cardList.value = await getThinkOrderExcelDataForCard(params);
} else {
trainingSections.value = await getThinkOrderTrainingBusinessData(params);
}
loading.value = false;
};
const changeType = (val: number) => {
type.value = val;
getList();
};
createTimeStart.value = dayjs().format('YYYY-MM-DD');
createTimeEnd.value = dayjs().format('YYYY-MM-DD 23:59:59');
getList();
const columns1 = ref<ColumnItem[]>([
{
title: '场馆名称',
dataIndex: 'siteName'
},
{
title: '卡类型',
children: [
{
title: '次卡',
dataIndex: 'timeCardIncome',
customCell: (row) => {
return {
onClick: () => {
sid.value = row.sid;
wechatOrder.value = '';
payTypeList.value = [8, 11];
showList.value = true;
showType.value = false;
showCardType.value = false;
}
};
}
},
{
title: '期间卡(指月卡、季卡、年卡)',
dataIndex: 'monthCardIncome',
customCell: (row) => {
return {
onClick: () => {
sid.value = row.sid;
wechatOrder.value = '';
payTypeList.value = [6, 7, 9, 10, 16, 17];
showList.value = true;
showType.value = false;
showCardType.value = false;
}
};
}
},
{
title: '充值卡(会员卡、IC卡)',
dataIndex: 'chargeCardIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [13, 14];
showList.value = true;
showType.value = false;
showCardType.value = false;
}
};
}
},
{
title: '散客订单',
dataIndex: 'guestIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [1, 4, 5];
showList.value = true;
showType.value = false;
showCardType.value = false;
}
};
}
},
{
title: '其他',
dataIndex: 'otherIncome',
customCell: (row) => {
return {
onClick: () => {
sid.value = row.sid;
wechatOrder.value = '';
payTypeList.value = [2, 3, 12, 15];
showList.value = true;
showType.value = false;
showCardType.value = false;
}
};
}
},
{
title: '小计',
dataIndex: 'siteIncome'
}
]
}
]);
const columns = ref<ColumnItem[]>([
{
title: '场馆名称',
dataIndex: 'siteName'
},
{
title: '收款方式',
children: [
{
title: '微信支付',
dataIndex: 'wechatIncome',
customCell: (row) => {
return {
onClick: () => {
sid.value = row.sid;
wechatOrder.value = '420000';
payTypeList.value = [1];
showList.value = true;
showType.value = true;
showCardType.value = false;
}
};
}
},
{
title: '微信支付退款',
dataIndex: 'wechatRefund',
customCell: (row) => {
return {
onClick: () => {
sid.value = row.sid;
}
};
}
},
{
title: 'POS机',
dataIndex: 'posIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [1, 3, 5];
showList.value = true;
showType.value = false;
showCardType.value = true;
}
};
}
},
{
title: '对公转账',
dataIndex: 'businessIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [18];
showList.value = true;
showType.value = false;
showCardType.value = true;
}
};
}
},
{
title: '现金收款',
dataIndex: 'cashIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [4];
showList.value = true;
showType.value = false;
showCardType.value = true;
}
};
}
},
{
title: '未支付已使用',
dataIndex: 'unPaidUsed',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [4];
showList.value = true;
showType.value = false;
}
};
}
},
{
title: '其他',
dataIndex: 'otherIncome',
customCell: (row) => {
return {
onClick: () => {
wechatOrder.value = '';
sid.value = row.sid;
payTypeList.value = [2, 12];
showList.value = true;
showType.value = false;
}
};
}
},
{
title: '小计',
dataIndex: 'siteIncome'
}
]
}
]);
const searchData = (param: ThinkOrderParam) => {
createTimeStart.value = param.createTimeStart;
createTimeEnd.value = param.createTimeEnd;
getList();
};
const reload = () => {
createTimeStart.value = dayjs().format('YYYY-MM-DD');
createTimeEnd.value = dayjs().format('YYYY-MM-DD');
getList();
};
</script>
<script lang="ts">
import * as MenuIcons from '@/layout/menu-icons';
export default {
name: 'ThinkOrder',
components: MenuIcons
};
</script>
<style lang="less" scoped>
.tag-icon {
padding-right: 6px;
}
</style>