Files
mp-10584/src/views/shop/shopOrderGoods/index.vue
赵忠林 482e2a2718 chore(config): 添加项目配置文件和隐私协议
- 添加 .editorconfig 文件统一代码风格
- 添加 .env.development 和 .env.example 环境配置文件
- 添加 .eslintignore 和 .eslintrc.js 代码检查配置
- 添加 .gitignore 版本控制忽略文件配置
- 添加 .prettierignore 格式化忽略配置
- 添加隐私协议HTML文件
- 添加API密钥管理组件基础结构
2026-01-26 14:05:01 +08:00

374 lines
8.5 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="shopOrderGoodsId"
:columns="columns"
:datasource="datasource"
:customRow="customRow"
tool-class="ele-toolbar-form"
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 === 'status'">
<a-tag v-if="record.status === 0" color="green">显示</a-tag>
<a-tag v-if="record.status === 1" color="red">隐藏</a-tag>
</template>
<template v-if="column.key === 'action'">
<a-space>
<a @click="openEdit(record)">修改</a>
<a-divider type="vertical" />
<a-popconfirm
title="确定要删除此记录吗?"
@confirm="remove(record)"
>
<a class="ele-text-danger">删除</a>
</a-popconfirm>
</a-space>
</template>
</template>
</ele-pro-table>
</a-card>
<!-- 编辑弹窗 -->
<ShopOrderGoodsEdit
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 type { EleProTable } 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 ShopOrderGoodsEdit from './components/shopOrderGoodsEdit.vue';
import {
pageShopOrderGoods,
removeShopOrderGoods,
removeBatchShopOrderGoods
} from '@/api/shop/shopOrderGoods';
import type {
ShopOrderGoods,
ShopOrderGoodsParam
} from '@/api/shop/shopOrderGoods/model';
// 表格实例
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
// 表格选中数据
const selection = ref<ShopOrderGoods[]>([]);
// 当前编辑数据
const current = ref<ShopOrderGoods | 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 pageShopOrderGoods({
...where,
...orders,
page,
limit
});
};
// 表格列配置
const columns = ref<ColumnItem[]>([
{
title: '自增ID',
dataIndex: 'id',
key: 'id',
align: 'center',
width: 90
},
{
title: '关联订单表id',
dataIndex: 'orderId',
key: 'orderId',
align: 'center'
},
{
title: '订单标识',
dataIndex: 'orderCode',
key: 'orderCode',
align: 'center'
},
{
title: '关联商户ID',
dataIndex: 'merchantId',
key: 'merchantId',
align: 'center'
},
{
title: '商户名称',
dataIndex: 'merchantName',
key: 'merchantName',
align: 'center'
},
{
title: '商品封面图',
dataIndex: 'image',
key: 'image',
align: 'center'
},
{
title: '关联商品id',
dataIndex: 'goodsId',
key: 'goodsId',
align: 'center'
},
{
title: '商品名称',
dataIndex: 'goodsName',
key: 'goodsName',
align: 'center'
},
{
title: '商品规格',
dataIndex: 'spec',
key: 'spec',
align: 'center'
},
{
title: '',
dataIndex: 'skuId',
key: 'skuId',
align: 'center'
},
{
title: '单价',
dataIndex: 'price',
key: 'price',
align: 'center'
},
{
title: '购买数量',
dataIndex: 'totalNum',
key: 'totalNum',
align: 'center'
},
{
title: '0 未付款 1已付款2无需付款或占用状态',
dataIndex: 'payStatus',
key: 'payStatus',
align: 'center'
},
{
title:
'0未使用1已完成2已取消3取消中4退款申请中5退款被拒绝6退款成功7客户端申请退款',
dataIndex: 'orderStatus',
key: 'orderStatus',
align: 'center'
},
{
title: '是否免费0收费、1免费',
dataIndex: 'isFree',
key: 'isFree',
align: 'center'
},
{
title: '系统版本 0当前版本 其他版本',
dataIndex: 'version',
key: 'version',
align: 'center'
},
{
title: '预约时间段',
dataIndex: 'timePeriod',
key: 'timePeriod',
align: 'center'
},
{
title: '预定日期',
dataIndex: 'dateTime',
key: 'dateTime',
align: 'center'
},
{
title: '开场时间',
dataIndex: 'startTime',
key: 'startTime',
align: 'center'
},
{
title: '结束时间',
dataIndex: 'endTime',
key: 'endTime',
align: 'center'
},
{
title: '毫秒时间戳',
dataIndex: 'timeFlag',
key: 'timeFlag',
align: 'center'
},
{
title: '过期时间',
dataIndex: 'expirationTime',
key: 'expirationTime',
align: 'center'
},
{
title: '备注',
dataIndex: 'comments',
key: 'comments',
align: 'center'
},
{
title: '用户id',
dataIndex: 'userId',
key: 'userId',
align: 'center'
},
{
title: '更新时间',
dataIndex: 'updateTime',
key: 'updateTime',
align: 'center'
},
{
title: '创建时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
sorter: true,
ellipsis: true,
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd')
},
{
title: '操作',
key: 'action',
width: 180,
fixed: 'right',
align: 'center',
hideInSetting: true
}
]);
/* 搜索 */
const reload = (where?: ShopOrderGoodsParam) => {
selection.value = [];
tableRef?.value?.reload({ where: where });
};
/* 打开编辑弹窗 */
const openEdit = (row?: ShopOrderGoods) => {
current.value = row ?? null;
showEdit.value = true;
};
/* 打开批量移动弹窗 */
const openMove = () => {
showMove.value = true;
};
/* 删除单个 */
const remove = (row: ShopOrderGoods) => {
const hide = message.loading('请求中..', 0);
removeShopOrderGoods(row.shopOrderGoodsId)
.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);
removeBatchShopOrderGoods(
selection.value.map((d) => d.shopOrderGoodsId)
)
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 查询 */
const query = () => {
loading.value = true;
};
/* 自定义行属性 */
const customRow = (record: ShopOrderGoods) => {
return {
// 行点击事件
onClick: () => {
// console.log(record);
},
// 行双击事件
onDblclick: () => {
openEdit(record);
}
};
};
query();
</script>
<script lang="ts">
export default {
name: 'ShopOrderGoods'
};
</script>
<style lang="less" scoped></style>