This commit is contained in:
2026-05-20 12:45:32 +08:00
4 changed files with 97 additions and 20 deletions

View File

@@ -18,6 +18,8 @@ export namespace OrderQueryApi {
create_time: string; create_time: string;
update_time: string; update_time: string;
query_state: string; query_state: string;
agent_user_name: string;
agent_user_mobile: string;
} }
export interface GetQueryDetailRequest { export interface GetQueryDetailRequest {
@@ -34,6 +36,8 @@ export namespace OrderQueryApi {
create_time: string; create_time: string;
update_time: string; update_time: string;
query_state: string; query_state: string;
agent_user_name: string;
agent_user_mobile: string;
} }
// 清理日志相关接口定义 // 清理日志相关接口定义

View File

@@ -6,21 +6,20 @@ import type {
} from '#/adapter/vxe-table'; } from '#/adapter/vxe-table';
import type { AgentApi } from '#/api/agent'; import type { AgentApi } from '#/api/agent';
import { computed } from 'vue'; import { computed, ref } from 'vue';
import { useRoute, useRouter } from 'vue-router'; import { useRoute, useRouter } from 'vue-router';
import { Page, useVbenDrawer, useVbenModal } from '@vben/common-ui'; import { Page, useVbenDrawer, useVbenModal } from '@vben/common-ui';
import { Button, Card, Dropdown, Menu } from 'ant-design-vue'; import { Button, Card, Dropdown, Form, Input, Menu, Modal, message } from 'ant-design-vue';
import { useVbenVxeGrid } from '#/adapter/vxe-table'; import { useVbenVxeGrid } from '#/adapter/vxe-table';
import { getAgentList } from '#/api/agent'; import { getAgentList, updateAgentMobile } from '#/api/agent';
import { useColumns, useGridFormSchema } from './data'; import { useColumns, useGridFormSchema } from './data';
import CommissionModal from './modules/commission-modal.vue'; import CommissionModal from './modules/commission-modal.vue';
import Form from './modules/form.vue'; import FormDrawerContent from './modules/form.vue';
import LinkModal from './modules/link-modal.vue'; import LinkModal from './modules/link-modal.vue';
import MobileEditModal from './modules/mobile-edit-modal.vue';
import OrderModal from './modules/order-modal.vue'; import OrderModal from './modules/order-modal.vue';
import RebateModal from './modules/rebate-modal.vue'; import RebateModal from './modules/rebate-modal.vue';
import DowngradeModal from './modules/downgrade-modal.vue'; import DowngradeModal from './modules/downgrade-modal.vue';
@@ -32,7 +31,7 @@ const router = useRouter();
// 表单抽屉 // 表单抽屉
const [FormDrawer, formDrawerApi] = useVbenDrawer({ const [FormDrawer, formDrawerApi] = useVbenDrawer({
connectedComponent: Form, connectedComponent: FormDrawerContent,
destroyOnClose: true, destroyOnClose: true,
}); });
@@ -72,11 +71,48 @@ const [WithdrawalModalComponent, withdrawalModalApi] = useVbenModal({
destroyOnClose: true, destroyOnClose: true,
}); });
// 修改手机号弹窗 // 修改手机号:本页 Modal + 表单
const [MobileEditModalComponent, mobileEditModalApi] = useVbenModal({ const mobileEditVisible = ref(false);
connectedComponent: MobileEditModal, const mobileEditRow = ref<AgentApi.AgentListItem | null>(null);
destroyOnClose: true, const mobileEditNewMobile = ref('');
}); const mobileEditLoading = ref(false);
function openMobileEdit(row: AgentApi.AgentListItem) {
mobileEditRow.value = row;
mobileEditNewMobile.value = row.mobile ?? '';
mobileEditVisible.value = true;
}
function closeMobileEdit() {
mobileEditVisible.value = false;
mobileEditRow.value = null;
mobileEditNewMobile.value = '';
}
async function submitMobileEdit() {
const row = mobileEditRow.value;
if (!row) return;
const mobile = mobileEditNewMobile.value?.trim();
if (!mobile) {
message.warning('请输入新手机号');
return;
}
if (!/^1[3-9]\d{9}$/.test(mobile)) {
message.warning('请输入正确的11位手机号');
return;
}
mobileEditLoading.value = true;
try {
await updateAgentMobile({ agent_id: String(row.id), mobile });
message.success('手机号修改成功');
closeMobileEdit();
onRefresh();
} catch {
message.error('手机号修改失败');
} finally {
mobileEditLoading.value = false;
}
}
// 代理降级弹窗 // 代理降级弹窗
const [DowngradeModalComponent, downgradeModalApi] = useVbenModal({ const [DowngradeModalComponent, downgradeModalApi] = useVbenModal({
@@ -196,10 +232,6 @@ function onActionClick(
onViewCommission(e.row); onViewCommission(e.row);
break; break;
} }
case 'edit-mobile': {
onEditMobile(e.row);
break;
}
case 'edit': { case 'edit': {
onEdit(e.row); onEdit(e.row);
break; break;
@@ -295,7 +327,6 @@ function onRefresh() {
<Page auto-content-height> <Page auto-content-height>
<FormDrawer @success="onRefresh" /> <FormDrawer @success="onRefresh" />
<LinkModalComponent /> <LinkModalComponent />
<MobileEditModalComponent @success="onRefresh" />
<DowngradeModalComponent @success="onRefresh" /> <DowngradeModalComponent @success="onRefresh" />
<CommissionModalComponent /> <CommissionModalComponent />
<RebateModalComponent /> <RebateModalComponent />
@@ -320,6 +351,9 @@ function onRefresh() {
<Button type="link" @click="onActionClick({ code: 'view-sub-agent', row })"> <Button type="link" @click="onActionClick({ code: 'view-sub-agent', row })">
查看下级 查看下级
</Button> </Button>
<Button type="link" @click="openMobileEdit(row)">
修改手机号
</Button>
<!-- <Button <!-- <Button
type="link" type="link"
@click="onActionClick({ code: 'order-record', row })" @click="onActionClick({ code: 'order-record', row })"
@@ -329,15 +363,33 @@ function onRefresh() {
<Dropdown> <Dropdown>
<Button type="link">更多操作</Button> <Button type="link">更多操作</Button>
<template #overlay> <template #overlay>
<Menu <Menu :items="getMoreMenuItems(row)" @click="(e) => onActionClick({ code: String(e.key), row })" />
:items="getMoreMenuItems(row)"
@click="(e) => onActionClick({ code: String(e.key), row })"
/>
</template> </template>
</Dropdown> </Dropdown>
</div> </div>
</template> </template>
</Grid> </Grid>
<!-- 修改手机号弹窗直接表单 -->
<Modal v-model:open="mobileEditVisible" title="修改手机号" width="420px" :footer="null" destroy-on-close
@cancel="closeMobileEdit">
<Form layout="vertical" class="pt-2">
<Form.Item label="当前手机号">
<Input :value="mobileEditRow?.mobile" disabled />
</Form.Item>
<Form.Item label="新手机号" required>
<Input v-model:value="mobileEditNewMobile" placeholder="请输入11位手机号" :maxlength="11" allow-clear />
</Form.Item>
<Form.Item class="mb-0">
<div class="flex justify-end gap-2">
<Button @click="closeMobileEdit">取消</Button>
<Button type="primary" :loading="mobileEditLoading" @click="submitMobileEdit">
确定
</Button>
</div>
</Form.Item>
</Form>
</Modal>
</Page> </Page>
</template> </template>

View File

@@ -143,6 +143,21 @@ export function useColumns<T = OrderApi.Order>(
export function useGridFormSchema(): VbenFormSchema[] { export function useGridFormSchema(): VbenFormSchema[] {
return [ return [
{
component: 'Input',
fieldName: 'query_subject_name',
label: '被查询人姓名',
},
{
component: 'Input',
fieldName: 'query_subject_mobile',
label: '被查询人手机号',
},
{
component: 'Input',
fieldName: 'query_subject_id_card',
label: '被查询人身份证',
},
{ {
component: 'Input', component: 'Input',
fieldName: 'order_no', fieldName: 'order_no',

View File

@@ -194,6 +194,12 @@ async function handleConfirmDelete() {
<Descriptions.Item label="更新时间"> <Descriptions.Item label="更新时间">
{{ queryDetail.update_time }} {{ queryDetail.update_time }}
</Descriptions.Item> </Descriptions.Item>
<Descriptions.Item label="代理用户姓名">
{{ queryDetail.agent_user_name || '--' }}
</Descriptions.Item>
<Descriptions.Item label="代理用户手机号">
{{ queryDetail.agent_user_mobile || '--' }}
</Descriptions.Item>
</Descriptions> </Descriptions>
</template> </template>
</Card> </Card>