Files
guofu-admin/modules/views/bak/userCard/index.vue
2024-08-23 22:28:24 +08:00

506 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="page">
<div class="ele-body">
<a-card :bordered="false" :body-style="{ padding: '16px' }">
<ele-pro-table
ref="tableRef"
row-key="userCardId"
:columns="columns"
:datasource="datasource"
:customRow="customRow"
tool-class="ele-toolbar-form"
:scroll="{ x: 800 }"
class="sys-org-table"
>
<template #toolbar>
<search
@search="reload"
:selection="selection"
@add="openEdit"
@remove="removeBatch"
@batchMove="openMove"
/>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'image'">
<a-image :src="record.image" :width="50" />
</template>
<template v-if="column.key === 'action'">
<a-space>
<a class="ele-text-success">解除绑定</a>
<a-divider type="vertical" />
<a class="ele-text-warning">变更绑定</a>
<a-divider type="vertical" />
<a-popconfirm
title="确定要删除此记录吗?"
@confirm="remove(record)"
>
<a class="ele-text-danger">注销</a>
</a-popconfirm>
<!-- <a-divider type="vertical" />-->
<!-- <a @click="openEdit(record)">修改</a>-->
<!-- <a-divider type="vertical" />-->
</a-space>
</template>
</template>
</ele-pro-table>
</a-card>
<!-- 编辑弹窗 -->
<UserCardEdit v-model:visible="showEdit" :data="current" @done="reload" />
</div>
</div>
</template>
<script lang="ts" setup>
import { createVNode, ref } from 'vue';
import { message, Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { EleProTable, formatNumber } from 'ele-admin-pro';
import { toDateString } from 'ele-admin-pro';
import type {
DatasourceFunction,
ColumnItem
} from 'ele-admin-pro/es/ele-pro-table/types';
import Search from './components/search.vue';
import UserCardEdit from './components/userCardEdit.vue';
import {
pageUserCard,
removeUserCard,
removeBatchUserCard
} from '@/api/booking/userCard';
import type { UserCard, UserCardParam } from '@/api/booking/userCard/model';
// 表格实例
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
// 表格选中数据
const selection = ref<UserCard[]>([]);
// 当前编辑数据
const current = ref<UserCard | null>(null);
// 是否显示编辑弹窗
const showEdit = ref(false);
// 是否显示批量移动弹窗
const showMove = ref(false);
// 加载状态
const loading = ref(true);
// 表格数据源
const datasource: DatasourceFunction = ({
page,
limit,
where,
orders,
filters
}) => {
if (filters) {
where.status = filters.status;
}
return pageUserCard({
...where,
...orders,
page,
limit
});
};
// 表格列配置
const columns = ref<ColumnItem[]>([
{
title: '姓名',
dataIndex: 'username',
key: 'username',
align: 'center',
width: 120,
fixed: 'left'
},
{
title: 'IC卡号',
dataIndex: 'code',
key: 'code',
width: 120,
fixed: 'left',
align: 'center'
},
{
title: '手机号码',
dataIndex: 'phone',
key: 'phone',
align: 'center',
width: 120,
fixed: 'left'
},
{
title: '会员卡名称',
dataIndex: 'name',
key: 'name',
width: 180,
align: 'center'
},
{
title: '卡号',
dataIndex: 'cardNum',
key: 'cardNum',
width: 120,
align: 'center'
},
{
title: '可用场馆',
dataIndex: 'sid',
key: 'sid',
width: 120,
align: 'center'
},
{
title: '购卡价格',
dataIndex: 'price',
key: 'price',
align: 'center',
width: 120,
customRender: ({ text }) => `${formatNumber(text)}`
},
{
title: '紧急联系人',
dataIndex: 'urgentName',
key: 'urgentName',
width: 120,
align: 'center'
},
{
title: '紧急联系人号码',
dataIndex: 'urgentPhone',
key: 'urgentPhone',
align: 'center',
width: 120
},
{
title: 'vip卡折扣率',
dataIndex: 'discount',
key: 'discount',
width: 120,
align: 'center'
},
{
title: '使用次数',
dataIndex: 'count',
key: 'count',
width: 120,
align: 'center'
},
{
title: '剩余次数',
dataIndex: 'num',
key: 'num',
width: 120,
align: 'center'
},
{
title: '每使用一次减少的金额',
dataIndex: 'eachMoney',
key: 'eachMoney',
width: 120,
align: 'center',
customRender: ({ text }) => `${formatNumber(text)}`
},
{
title: '剩余金额',
dataIndex: 'remainingMoney',
key: 'remainingMoney',
width: 120,
align: 'center',
customRender: ({ text }) => `${formatNumber(text)}`
},
{
title: '月限',
dataIndex: 'month',
key: 'month',
width: 120,
align: 'center'
},
{
title: '会员卡年限',
dataIndex: 'term',
key: 'term',
width: 120,
align: 'center'
},
{
title: 'IC卡类型',
dataIndex: 'type',
key: 'type',
width: 120,
align: 'center',
customRender: ({ text }) =>
['-', '年卡', '次卡', '月卡', '会员IC卡', '充值卡'][text]
},
{
title: '是否赠送积分',
dataIndex: 'isIntegral',
key: 'isIntegral',
width: 120,
align: 'center',
customRender: ({ text }) => ['', '赠送', '不赠送'][text]
},
{
title: '支付状态',
dataIndex: 'status',
key: 'status',
width: 120,
align: 'center',
customRender: ({ text }) => ['未支付', '已支付'][text]
},
{
title: '支付方式',
dataIndex: 'payType',
key: 'payType',
width: 120,
align: 'center',
customRender: ({ text }) =>
[
'余额支付',
'微信支付',
'支付宝支付',
'现金',
'POS机刷卡',
'平安健康卡'
][text]
},
{
title: '是否已开具发票',
dataIndex: 'isInvoice',
key: 'isInvoice',
width: 120,
align: 'center',
customRender: ({ text }) => ['未开票', '已开票', '未开票'][text]
},
{
title: '到期时间',
dataIndex: 'expireTime',
key: 'expireTime',
align: 'center',
width: 180,
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd HH:mm')
},
{
title: '购卡时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
sorter: true,
ellipsis: true,
width: 180,
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd')
},
// {
// title: '用户id',
// dataIndex: 'uid',
// key: 'uid',
// width: 190,
// align: 'center',
// },
// {
// title: 'vip卡id',
// dataIndex: 'vid',
// key: 'vid',
// width: 190,
// align: 'center',
// },
// {
// title: '开卡人id',
// dataIndex: 'aid',
// key: 'aid',
// align: 'center',
// },
// {
// title: '微信订单号',
// dataIndex: 'wechatOrder',
// key: 'wechatOrder',
// width: 190,
// align: 'center',
// },
// {
// title: '会员卡介绍',
// dataIndex: 'desc',
// key: 'desc',
// align: 'center',
// },
// {
// title: '会员卡说明',
// dataIndex: 'info',
// key: 'info',
// width: 490,
// align: 'center',
// },
// {
// title: '续费累加次数',
// dataIndex: 'number',
// key: 'number',
// align: 'center',
// },
// {
// title: '卡类型1成人卡2儿童卡',
// dataIndex: 'cardType',
// key: 'cardType',
// align: 'center',
// },
// {
// title: 'vip卡等级类型1特殊vip卡2普通vip卡',
// dataIndex: 'vipType',
// key: 'vipType',
// align: 'center',
// },
// {
// title: '特殊卡开发凭证图',
// dataIndex: 'pic',
// key: 'pic',
// align: 'center',
// },
// {
// title: '价格组',
// dataIndex: 'prices',
// key: 'prices',
// align: 'center',
// },
// {
// title: '密码',
// dataIndex: 'password',
// key: 'password',
// align: 'center',
// },
// {
// title: '使用时间',
// dataIndex: 'useTime',
// key: 'useTime',
// align: 'center',
// },
// {
// title: '',
// dataIndex: 'updateTime',
// key: 'updateTime',
// align: 'center',
// },
// {
// title: '身份证号码',
// dataIndex: 'idCard',
// key: 'idCard',
// align: 'center',
// },
// {
// title: '备注',
// dataIndex: 'remark',
// key: 'remark',
// align: 'center',
// },
// {
// title: '备注',
// dataIndex: 'comments',
// key: 'comments',
// align: 'center',
// },
// {
// title: '排序号',
// dataIndex: 'sortNumber',
// key: 'sortNumber',
// align: 'center'
// },
{
title: '操作',
key: 'action',
width: 240,
fixed: 'right',
align: 'center',
hideInSetting: true
}
]);
/* 搜索 */
const reload = (where?: UserCardParam) => {
console.log(where);
selection.value = [];
tableRef?.value?.reload({ where: where });
};
/* 打开编辑弹窗 */
const openEdit = (row?: UserCard) => {
current.value = row ?? null;
showEdit.value = true;
};
/* 打开批量移动弹窗 */
const openMove = () => {
showMove.value = true;
};
/* 删除单个 */
const remove = (row: UserCard) => {
const hide = message.loading('请求中..', 0);
removeUserCard(row.userCardId)
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
};
/* 批量删除 */
const removeBatch = () => {
if (!selection.value.length) {
message.error('请至少选择一条数据');
return;
}
Modal.confirm({
title: '提示',
content: '确定要删除选中的记录吗?',
icon: createVNode(ExclamationCircleOutlined),
maskClosable: true,
onOk: () => {
const hide = message.loading('请求中..', 0);
removeBatchUserCard(selection.value.map((d) => d.userCardId))
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 查询 */
const query = () => {
loading.value = true;
};
/* 自定义行属性 */
const customRow = (record: UserCard) => {
return {
// 行点击事件
onClick: () => {
// console.log(record);
},
// 行双击事件
onDblclick: () => {
openEdit(record);
}
};
};
query();
</script>
<script lang="ts">
export default {
name: 'UserCard'
};
</script>
<style lang="less" scoped></style>