diff --git a/apps/web-antd/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue b/apps/web-antd/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue index 019308cf6..7e9520fe5 100644 --- a/apps/web-antd/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue +++ b/apps/web-antd/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue @@ -26,7 +26,6 @@ const [Grid] = useVbenVxeGrid({ proxyConfig: { ajax: { query: async ({ page }, formValues) => { - // 处理全部的情况 const params = { pageNo: page.currentPage, pageSize: page.pageSize, diff --git a/apps/web-ele/src/views/mall/trade/brokerage/record/index.vue b/apps/web-ele/src/views/mall/trade/brokerage/record/index.vue index 17a2ad396..a95964874 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/record/index.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/record/index.vue @@ -19,7 +19,6 @@ const [Grid] = useVbenVxeGrid({ columns: useGridColumns(), height: 'auto', keepSource: true, - showOverflow: 'tooltip', proxyConfig: { ajax: { query: async ({ page }, formValues) => { diff --git a/apps/web-ele/src/views/mall/trade/brokerage/user/data.ts b/apps/web-ele/src/views/mall/trade/brokerage/user/data.ts index 8de25b5bf..2386a2e2d 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/user/data.ts +++ b/apps/web-ele/src/views/mall/trade/brokerage/user/data.ts @@ -1,6 +1,8 @@ import type { VbenFormSchema } from '#/adapter/form'; import type { VxeTableGridOptions } from '#/adapter/vxe-table'; +import { DICT_TYPE } from '@vben/constants'; +import { getDictOptions } from '@vben/hooks'; import { fenToYuan } from '@vben/utils'; import { getRangePickerDefaultProps } from '#/utils'; @@ -138,3 +140,177 @@ export function useGridColumns(): VxeTableGridOptions['columns'] { }, ]; } + +/** 用户列表弹窗搜索表单配置 */ +export function useUserListFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'level', + label: '用户类型', + component: 'RadioGroup', + // TODO @霖:这里会折行 + componentProps: { + options: [ + { label: '全部', value: undefined }, + { label: '一级推广人', value: '1' }, + { label: '二级推广人', value: '2' }, + ], + buttonStyle: 'solid', + optionType: 'button', + }, + }, + { + fieldName: 'bindUserTime', + label: '绑定时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + clearable: true, + }, + }, + ]; +} + +/** 用户列表弹窗表格列配置 */ +export function useUserListColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'id', + title: '用户编号', + minWidth: 80, + }, + { + field: 'avatar', + title: '头像', + minWidth: 70, + cellRender: { + name: 'CellImage', + props: { + width: 24, + height: 24, + shape: 'circle', + }, + }, + }, + { + field: 'nickname', + title: '昵称', + minWidth: 80, + }, + { + field: 'brokerageUserCount', + title: '推广人数', + minWidth: 80, + }, + { + field: 'brokerageOrderCount', + title: '推广订单数量', + minWidth: 110, + }, + { + field: 'brokerageEnabled', + title: '推广资格', + minWidth: 80, + slots: { default: 'brokerageEnabled' }, + }, + { + field: 'bindUserTime', + title: '绑定时间', + width: 180, + formatter: 'formatDateTime', + }, + ]; +} + +/** 推广订单列表弹窗搜索表单配置 */ +export function useOrderListFormSchema(): VbenFormSchema[] { + return [ + { + fieldName: 'sourceUserLevel', + label: '用户类型', + component: 'Select', + componentProps: { + options: [ + { label: '全部', value: 0 }, + { label: '一级推广人', value: 1 }, + { label: '二级推广人', value: 2 }, + ], + }, + defaultValue: 0, + }, + { + fieldName: 'status', + label: '状态', + component: 'Select', + componentProps: { + placeholder: '请选择状态', + clearable: true, + options: getDictOptions(DICT_TYPE.BROKERAGE_RECORD_STATUS, 'number'), + }, + }, + { + fieldName: 'createTime', + label: '创建时间', + component: 'RangePicker', + componentProps: { + ...getRangePickerDefaultProps(), + clearable: true, + }, + }, + ]; +} + +/** 推广订单列表弹窗表格列配置 */ +export function useOrderListColumns(): VxeTableGridOptions['columns'] { + return [ + { + field: 'bizId', + title: '订单编号', + minWidth: 80, + }, + { + field: 'sourceUserId', + title: '用户编号', + minWidth: 80, + }, + { + field: 'sourceUserAvatar', + title: '头像', + minWidth: 70, + cellRender: { + name: 'CellImage', + props: { + width: 24, + height: 24, + }, + }, + }, + { + field: 'sourceUserNickname', + title: '昵称', + minWidth: 80, + }, + { + field: 'price', + title: '佣金', + minWidth: 100, + formatter: ({ row }) => `¥${fenToYuan(row.price)}`, + }, + { + field: 'status', + title: '状态', + minWidth: 85, + cellRender: { + name: 'CellDict', + props: { type: DICT_TYPE.BROKERAGE_RECORD_STATUS }, + }, + }, + { + field: 'createTime', + title: '创建时间', + width: 180, + formatter: 'formatDateTime', + }, + ]; +} + diff --git a/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue b/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue index 9554f2613..17de7862e 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/user/index.vue @@ -2,11 +2,10 @@ import type { VxeTableGridOptions } from '#/adapter/vxe-table'; import type { MallBrokerageUserApi } from '#/api/mall/trade/brokerage/user'; -import { useAccess } from '@vben/access'; import { confirm, DocAlert, Page, useVbenModal } from '@vben/common-ui'; import { $t } from '@vben/locales'; -import { ElLoading, ElMessage, ElSwitch } from 'element-plus'; +import { ElMessage, ElSwitch } from 'element-plus'; import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table'; import { @@ -16,84 +15,85 @@ import { } from '#/api/mall/trade/brokerage/user'; import { useGridColumns, useGridFormSchema } from './data'; +import CreateForm from './modules/create-form.vue'; import BrokerageOrderListModal from './modules/order-list-modal.vue'; -import BrokerageUserCreateForm from './modules/user-create-form.vue'; +import UpdateForm from './modules/update-form.vue'; import BrokerageUserListModal from './modules/user-list-modal.vue'; -import BrokerageUserUpdateForm from './modules/user-update-form.vue'; defineOptions({ name: 'TradeBrokerageUser' }); -const { hasAccessByCodes } = useAccess(); +const [CreateFormModal, createFormModalApi] = useVbenModal({ + connectedComponent: CreateForm, + destroyOnClose: true, +}); + +const [UpdateFormModal, updateModalApi] = useVbenModal({ + connectedComponent: UpdateForm, + destroyOnClose: true, +}); + +const [OrderListModal, orderListModalApi] = useVbenModal({ + connectedComponent: BrokerageOrderListModal, + destroyOnClose: true, +}); + +const [UserListModal, userListModalApi] = useVbenModal({ + connectedComponent: BrokerageUserListModal, + destroyOnClose: true, +}); /** 刷新表格 */ -function onRefresh() { +function handleRefresh() { gridApi.query(); } -const [OrderListModal, OrderListModalApi] = useVbenModal({ - connectedComponent: BrokerageOrderListModal, -}); +/** 创建分销员 */ +function handleCreate() { + createFormModalApi.open(); +} -const [UserCreateModal, UserCreateModalApi] = useVbenModal({ - connectedComponent: BrokerageUserCreateForm, -}); - -const [UserListModal, UserListModalApi] = useVbenModal({ - connectedComponent: BrokerageUserListModal, -}); - -const [UserUpdateModal, UserUpdateModalApi] = useVbenModal({ - connectedComponent: BrokerageUserUpdateForm, -}); +/** 修改分销员 */ +function handleUpdateForm(row: MallBrokerageUserApi.BrokerageUser) { + updateModalApi.setData(row).open(); +} /** 打开推广人列表 */ -function openBrokerageUserTable(row: MallBrokerageUserApi.BrokerageUser) { - UserListModalApi.setData(row).open(); +function handleOpenUserList(row: MallBrokerageUserApi.BrokerageUser) { + userListModalApi.setData(row).open(); } /** 打开推广订单列表 */ -function openBrokerageOrderTable(row: MallBrokerageUserApi.BrokerageUser) { - OrderListModalApi.setData(row).open(); -} - -/** 打开表单:修改上级推广人 */ -function openUpdateBindUserForm(row: MallBrokerageUserApi.BrokerageUser) { - UserUpdateModalApi.setData(row).open(); -} - -/** 创建分销员 */ -function openCreateUserForm() { - UserCreateModalApi.open(); +function handleOpenOrderList(row: MallBrokerageUserApi.BrokerageUser) { + orderListModalApi.setData(row).open(); } /** 清除上级推广人 */ async function handleClearBindUser(row: MallBrokerageUserApi.BrokerageUser) { await confirm(`确定清除"${row.nickname}"的上级推广人吗?`); - await clearBindUser({ id: row.id as number }); - ElMessage.success('清除成功'); - onRefresh(); + try { + await clearBindUser({ id: row.id as number }); + ElMessage.success('清除成功'); + handleRefresh(); + } catch { + // 清除失败时不做处理 + } } -/** 推广资格:开通/关闭 */ +/** 更新推广资格 */ async function handleBrokerageEnabledChange( row: MallBrokerageUserApi.BrokerageUser, ) { const text = row.brokerageEnabled ? '开通' : '关闭'; - const loadingInstance = ElLoading.service({ - text: `正在${text}"${row.nickname}"的推广资格...`, - }); try { await updateBrokerageEnabled({ id: row.id as number, enabled: row.brokerageEnabled as boolean, }); ElMessage.success(`${text}成功`); - onRefresh(); + handleRefresh(); } catch { // 异常时,需要重置回之前的值 row.brokerageEnabled = !row.brokerageEnabled; - } finally { - loadingInstance.close(); } } @@ -105,7 +105,6 @@ const [Grid, gridApi] = useVbenVxeGrid({ columns: useGridColumns(), height: 'auto', keepSource: true, - showOverflow: 'tooltip', proxyConfig: { ajax: { query: async ({ page }, formValues) => { @@ -138,7 +137,15 @@ const [Grid, gridApi] = useVbenVxeGrid({ /> - + + + + + + + + + diff --git a/apps/web-ele/src/views/mall/trade/brokerage/user/modules/user-create-form.vue b/apps/web-ele/src/views/mall/trade/brokerage/user/modules/create-form.vue similarity index 98% rename from apps/web-ele/src/views/mall/trade/brokerage/user/modules/user-create-form.vue rename to apps/web-ele/src/views/mall/trade/brokerage/user/modules/create-form.vue index cb2830ed0..f73b37dc0 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/user/modules/user-create-form.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/user/modules/create-form.vue @@ -168,7 +168,7 @@ async function handleGetUser(id: any, userType: string) { {{ userInfo.bindUser?.nickname }} - + @@ -179,4 +179,4 @@ async function handleGetUser(id: any, userType: string) { - + \ No newline at end of file diff --git a/apps/web-ele/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue b/apps/web-ele/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue index c9dec9c62..7e9520fe5 100644 --- a/apps/web-ele/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue +++ b/apps/web-ele/src/views/mall/trade/brokerage/user/modules/order-list-modal.vue @@ -1,158 +1,35 @@