feat: mall bargain record
							parent
							
								
									8ff0f216a9
								
							
						
					
					
						commit
						e1d04d8a6a
					
				|  | @ -0,0 +1,161 @@ | ||||||
|  | import type { VbenFormSchema } from '#/adapter/form'; | ||||||
|  | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||||
|  | 
 | ||||||
|  | import { DICT_TYPE, getDictOptions, getRangePickerDefaultProps } from '#/utils'; | ||||||
|  | 
 | ||||||
|  | /** 列表的搜索表单 */ | ||||||
|  | export function useGridFormSchema(): VbenFormSchema[] { | ||||||
|  |   return [ | ||||||
|  |     { | ||||||
|  |       fieldName: 'status', | ||||||
|  |       label: '砍价状态', | ||||||
|  |       component: 'Select', | ||||||
|  |       componentProps: { | ||||||
|  |         placeholder: '请选择砍价状态', | ||||||
|  |         clearable: true, | ||||||
|  |         options: getDictOptions( | ||||||
|  |           DICT_TYPE.PROMOTION_BARGAIN_RECORD_STATUS, | ||||||
|  |           'number', | ||||||
|  |         ), | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       fieldName: 'createTime', | ||||||
|  |       label: '创建时间', | ||||||
|  |       component: 'RangePicker', | ||||||
|  |       componentProps: { | ||||||
|  |         ...getRangePickerDefaultProps(), | ||||||
|  |         clearable: true, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |   ]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** 列表的字段 */ | ||||||
|  | export function useGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|  |   return [ | ||||||
|  |     { | ||||||
|  |       field: 'id', | ||||||
|  |       title: '编号', | ||||||
|  |       minWidth: 50, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'avatar', | ||||||
|  |       title: '用户头像', | ||||||
|  |       minWidth: 120, | ||||||
|  |       cellRender: { | ||||||
|  |         name: 'CellImage', | ||||||
|  |         props: { | ||||||
|  |           height: 40, | ||||||
|  |           width: 40, | ||||||
|  |           shape: 'circle', | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'nickname', | ||||||
|  |       title: '用户昵称', | ||||||
|  |       minWidth: 100, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'createTime', | ||||||
|  |       title: '发起时间', | ||||||
|  |       width: 180, | ||||||
|  |       formatter: 'formatDateTime', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'activity.name', | ||||||
|  |       title: '砍价活动', | ||||||
|  |       minWidth: 150, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'activity.bargainMinPrice', | ||||||
|  |       title: '最低价', | ||||||
|  |       minWidth: 100, | ||||||
|  |       formatter: 'formatAmount2', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'bargainPrice', | ||||||
|  |       title: '当前价', | ||||||
|  |       minWidth: 100, | ||||||
|  |       formatter: 'formatAmount2', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'activity.helpMaxCount', | ||||||
|  |       title: '总砍价次数', | ||||||
|  |       minWidth: 100, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'helpCount', | ||||||
|  |       title: '剩余砍价次数', | ||||||
|  |       minWidth: 100, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'status', | ||||||
|  |       title: '砍价状态', | ||||||
|  |       minWidth: 100, | ||||||
|  |       cellRender: { | ||||||
|  |         name: 'CellDict', | ||||||
|  |         props: { type: DICT_TYPE.PROMOTION_BARGAIN_RECORD_STATUS }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'endTime', | ||||||
|  |       title: '结束时间', | ||||||
|  |       width: 180, | ||||||
|  |       formatter: 'formatDateTime', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'orderId', | ||||||
|  |       title: '订单编号', | ||||||
|  |       minWidth: 100, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       title: '操作', | ||||||
|  |       width: 100, | ||||||
|  |       fixed: 'right', | ||||||
|  |       slots: { default: 'actions' }, | ||||||
|  |     }, | ||||||
|  |   ]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /** 助力列表表格列配置 */ | ||||||
|  | export function useHelpGridColumns(): VxeTableGridOptions['columns'] { | ||||||
|  |   return [ | ||||||
|  |     { | ||||||
|  |       field: 'userId', | ||||||
|  |       title: '用户编号', | ||||||
|  |       minWidth: 80, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'avatar', | ||||||
|  |       title: '用户头像', | ||||||
|  |       minWidth: 80, | ||||||
|  |       cellRender: { | ||||||
|  |         name: 'CellImage', | ||||||
|  |         props: { | ||||||
|  |           height: 40, | ||||||
|  |           width: 40, | ||||||
|  |           shape: 'circle', | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'nickname', | ||||||
|  |       title: '用户昵称', | ||||||
|  |       minWidth: 100, | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'reducePrice', | ||||||
|  |       title: '砍价金额', | ||||||
|  |       minWidth: 100, | ||||||
|  |       formatter: 'formatAmount2', | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |       field: 'createTime', | ||||||
|  |       title: '助力时间', | ||||||
|  |       width: 180, | ||||||
|  |       formatter: 'formatDateTime', | ||||||
|  |     }, | ||||||
|  |   ]; | ||||||
|  | } | ||||||
|  | @ -1,32 +1,83 @@ | ||||||
| <script lang="ts" setup> | <script lang="ts" setup> | ||||||
| import { DocAlert, Page } from '@vben/common-ui'; | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||||
|  | import type { MallBargainRecordApi } from '#/api/mall/promotion/bargain/bargainRecord'; | ||||||
| 
 | 
 | ||||||
| import { Button } from 'ant-design-vue'; | import { DocAlert, Page, useVbenModal } from '@vben/common-ui'; | ||||||
|  | 
 | ||||||
|  | import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; | ||||||
|  | import { getBargainRecordPage } from '#/api/mall/promotion/bargain/bargainRecord'; | ||||||
|  | 
 | ||||||
|  | import { useGridColumns, useGridFormSchema } from './data'; | ||||||
|  | import HelpListModal from './modules/list.vue'; | ||||||
|  | 
 | ||||||
|  | defineOptions({ name: 'PromotionBargainRecord' }); | ||||||
|  | 
 | ||||||
|  | const [HelpListModalApi, helpListModalApi] = useVbenModal({ | ||||||
|  |   connectedComponent: HelpListModal, | ||||||
|  |   destroyOnClose: true, | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | /** 查看助力详情 */ | ||||||
|  | function handleViewHelp(row: MallBargainRecordApi.BargainRecord) { | ||||||
|  |   helpListModalApi.setData({ recordId: row.id }).open(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | const [Grid] = useVbenVxeGrid({ | ||||||
|  |   formOptions: { | ||||||
|  |     schema: useGridFormSchema(), | ||||||
|  |   }, | ||||||
|  |   gridOptions: { | ||||||
|  |     columns: useGridColumns(), | ||||||
|  |     height: 'auto', | ||||||
|  |     keepSource: true, | ||||||
|  |     proxyConfig: { | ||||||
|  |       ajax: { | ||||||
|  |         query: async ({ page }, formValues) => { | ||||||
|  |           return await getBargainRecordPage({ | ||||||
|  |             pageNo: page.currentPage, | ||||||
|  |             pageSize: page.pageSize, | ||||||
|  |             ...formValues, | ||||||
|  |           }); | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     rowConfig: { | ||||||
|  |       keyField: 'id', | ||||||
|  |       isHover: true, | ||||||
|  |     }, | ||||||
|  |     toolbarConfig: { | ||||||
|  |       refresh: { code: 'query' }, | ||||||
|  |       search: true, | ||||||
|  |     }, | ||||||
|  |   } as VxeTableGridOptions<MallBargainRecordApi.BargainRecord>, | ||||||
|  | }); | ||||||
| </script> | </script> | ||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <Page> |   <Page auto-content-height> | ||||||
|     <DocAlert |     <template #doc> | ||||||
|       title="【营销】砍价活动" |       <DocAlert | ||||||
|       url="https://doc.iocoder.cn/mall/promotion-bargain/" |         title="【营销】砍价活动" | ||||||
|     /> |         url="https://doc.iocoder.cn/mall/promotion-bargain/" | ||||||
|     <Button |       /> | ||||||
|       danger |     </template> | ||||||
|       type="link" | 
 | ||||||
|       target="_blank" |     <HelpListModalApi /> | ||||||
|       href="https://github.com/yudaocode/yudao-ui-admin-vue3" | 
 | ||||||
|     > |     <Grid table-title="砍价记录列表"> | ||||||
|       该功能支持 Vue3 + element-plus 版本! |       <template #actions="{ row }"> | ||||||
|     </Button> |         <TableAction | ||||||
|     <br /> |           :actions="[ | ||||||
|     <Button |             { | ||||||
|       type="link" |               label: '助力', | ||||||
|       target="_blank" |               type: 'link', | ||||||
|       href="https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/mall/promotion/bargain/record/index" |               icon: ACTION_ICON.VIEW, | ||||||
|     > |               auth: ['promotion:bargain-help:query'], | ||||||
|       可参考 |               onClick: handleViewHelp.bind(null, row), | ||||||
|       https://github.com/yudaocode/yudao-ui-admin-vue3/blob/master/src/views/mall/promotion/bargain/record/index |             }, | ||||||
|       代码,pull request 贡献给我们! |           ]" | ||||||
|     </Button> |         /> | ||||||
|  |       </template> | ||||||
|  |     </Grid> | ||||||
|   </Page> |   </Page> | ||||||
| </template> | </template> | ||||||
|  |  | ||||||
|  | @ -0,0 +1,67 @@ | ||||||
|  | <script lang="ts" setup> | ||||||
|  | import type { VxeTableGridOptions } from '#/adapter/vxe-table'; | ||||||
|  | import type { MallBargainHelpApi } from '#/api/mall/promotion/bargain/bargainHelp'; | ||||||
|  | 
 | ||||||
|  | import { computed, ref } from 'vue'; | ||||||
|  | 
 | ||||||
|  | import { useVbenModal } from '@vben/common-ui'; | ||||||
|  | 
 | ||||||
|  | import { useVbenVxeGrid } from '#/adapter/vxe-table'; | ||||||
|  | import { getBargainHelpPage } from '#/api/mall/promotion/bargain/bargainHelp'; | ||||||
|  | 
 | ||||||
|  | import { useHelpGridColumns } from '../data'; | ||||||
|  | 
 | ||||||
|  | /** 助力列表 */ | ||||||
|  | defineOptions({ name: 'BargainRecordListDialog' }); | ||||||
|  | 
 | ||||||
|  | const recordId = ref<number>(); | ||||||
|  | const getTitle = computed(() => { | ||||||
|  |   return `助力列表 - 记录${recordId.value || ''}`; | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | const [Modal, modalApi] = useVbenModal({ | ||||||
|  |   async onOpenChange(isOpen: boolean) { | ||||||
|  |     if (!isOpen) { | ||||||
|  |       recordId.value = undefined; | ||||||
|  |       return; | ||||||
|  |     } | ||||||
|  |     // 获取传入的记录ID | ||||||
|  |     const data = modalApi.getData<{ recordId: number }>(); | ||||||
|  |     if (data?.recordId) { | ||||||
|  |       recordId.value = data.recordId; | ||||||
|  |     } | ||||||
|  |   }, | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | const [Grid] = useVbenVxeGrid({ | ||||||
|  |   gridOptions: { | ||||||
|  |     columns: useHelpGridColumns(), | ||||||
|  |     height: 600, | ||||||
|  |     keepSource: true, | ||||||
|  |     proxyConfig: { | ||||||
|  |       ajax: { | ||||||
|  |         query: async ({ page }) => { | ||||||
|  |           return await getBargainHelpPage({ | ||||||
|  |             pageNo: page.currentPage, | ||||||
|  |             pageSize: page.pageSize, | ||||||
|  |             recordId: recordId.value, | ||||||
|  |           }); | ||||||
|  |         }, | ||||||
|  |       }, | ||||||
|  |     }, | ||||||
|  |     rowConfig: { | ||||||
|  |       keyField: 'id', | ||||||
|  |       isHover: true, | ||||||
|  |     }, | ||||||
|  |     toolbarConfig: { | ||||||
|  |       refresh: { code: 'query' }, | ||||||
|  |     }, | ||||||
|  |   } as VxeTableGridOptions<MallBargainHelpApi.BargainHelp>, | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <template> | ||||||
|  |   <Modal class="w-2/5" :title="getTitle"> | ||||||
|  |     <Grid class="mx-4" /> | ||||||
|  |   </Modal> | ||||||
|  | </template> | ||||||
|  | @ -10,7 +10,7 @@ import { | ||||||
| // 格式化【优惠金额/折扣】
 | // 格式化【优惠金额/折扣】
 | ||||||
| export function discountFormat(row: MallCouponTemplateApi.CouponTemplate) { | export function discountFormat(row: MallCouponTemplateApi.CouponTemplate) { | ||||||
|   if (row.discountType === PromotionDiscountTypeEnum.PRICE.type) { |   if (row.discountType === PromotionDiscountTypeEnum.PRICE.type) { | ||||||
|     return `¥${floatToFixed2(row.discountPrice)}`; |     return `¥${floatToFixed2(row.discountPrice)}`; | ||||||
|   } |   } | ||||||
|   if (row.discountType === PromotionDiscountTypeEnum.PERCENT.type) { |   if (row.discountType === PromotionDiscountTypeEnum.PERCENT.type) { | ||||||
|     return `${row.discountPercent}%`; |     return `${row.discountPercent}%`; | ||||||
|  | @ -61,5 +61,5 @@ export function remainedCountFormat(row: MallCouponTemplateApi.CouponTemplate) { | ||||||
| 
 | 
 | ||||||
| // 格式化【最低消费】
 | // 格式化【最低消费】
 | ||||||
| export function usePriceFormat(row: MallCouponTemplateApi.CouponTemplate) { | export function usePriceFormat(row: MallCouponTemplateApi.CouponTemplate) { | ||||||
|   return `¥${floatToFixed2(row.usePrice)}`; |   return `¥${floatToFixed2(row.usePrice)}`; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 xingyu4j
						xingyu4j