feat(dealer): 完善经销商客户添加与订单展示功能
- 添加推荐人信息查询逻辑 - 验证报备人是否存在
This commit is contained in:
@@ -28,6 +28,8 @@ export interface ShopDealerOrder {
|
|||||||
isInvalid?: number;
|
isInvalid?: number;
|
||||||
// 佣金结算(0未结算 1已结算)
|
// 佣金结算(0未结算 1已结算)
|
||||||
isSettled?: number;
|
isSettled?: number;
|
||||||
|
// 分销佣金比例
|
||||||
|
rate?: number;
|
||||||
// 结算时间
|
// 结算时间
|
||||||
settleTime?: number;
|
settleTime?: number;
|
||||||
// 订单备注
|
// 订单备注
|
||||||
|
|||||||
@@ -15,6 +15,8 @@ import {
|
|||||||
formatDateForDatabase,
|
formatDateForDatabase,
|
||||||
extractDateForCalendar, formatDateForDisplay
|
extractDateForCalendar, formatDateForDisplay
|
||||||
} from "@/utils/dateUtils";
|
} from "@/utils/dateUtils";
|
||||||
|
import {ShopDealerUser} from "@/api/shop/shopDealerUser/model";
|
||||||
|
import {getShopDealerUser, pageShopDealerUser} from "@/api/shop/shopDealerUser";
|
||||||
|
|
||||||
const AddShopDealerApply = () => {
|
const AddShopDealerApply = () => {
|
||||||
const {user} = useUser()
|
const {user} = useUser()
|
||||||
@@ -24,6 +26,7 @@ const AddShopDealerApply = () => {
|
|||||||
const formRef = useRef<any>(null)
|
const formRef = useRef<any>(null)
|
||||||
const [isEditMode, setIsEditMode] = useState<boolean>(false)
|
const [isEditMode, setIsEditMode] = useState<boolean>(false)
|
||||||
const [existingApply, setExistingApply] = useState<ShopDealerApply | null>(null)
|
const [existingApply, setExistingApply] = useState<ShopDealerApply | null>(null)
|
||||||
|
const [referee, setReferee] = useState<ShopDealerUser>()
|
||||||
|
|
||||||
// 日期选择器状态
|
// 日期选择器状态
|
||||||
const [showApplyTimePicker, setShowApplyTimePicker] = useState<boolean>(false)
|
const [showApplyTimePicker, setShowApplyTimePicker] = useState<boolean>(false)
|
||||||
@@ -78,7 +81,12 @@ const AddShopDealerApply = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const reload = async () => {
|
const reload = async () => {
|
||||||
|
// 查询推荐人信息
|
||||||
|
const dealerUser = await getShopDealerUser(Number(Taro.getStorageSync('UserId')))
|
||||||
|
setReferee(dealerUser)
|
||||||
|
|
||||||
if (!params.id) {
|
if (!params.id) {
|
||||||
|
setLoading(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// 查询当前用户ID是否已有申请记录
|
// 查询当前用户ID是否已有申请记录
|
||||||
@@ -100,7 +108,7 @@ const AddShopDealerApply = () => {
|
|||||||
Taro.setNavigationBarTitle({title: '签约'})
|
Taro.setNavigationBarTitle({title: '签约'})
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
setLoading(true)
|
setLoading(false)
|
||||||
console.error('查询申请记录失败:', error);
|
console.error('查询申请记录失败:', error);
|
||||||
setIsEditMode(false);
|
setIsEditMode(false);
|
||||||
setExistingApply(null);
|
setExistingApply(null);
|
||||||
@@ -126,6 +134,7 @@ const AddShopDealerApply = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const submitSucceed = async (values: any) => {
|
const submitSucceed = async (values: any) => {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// 验证必填字段
|
// 验证必填字段
|
||||||
if (!values.mobile || values.mobile.trim() === '') {
|
if (!values.mobile || values.mobile.trim() === '') {
|
||||||
@@ -146,6 +155,18 @@ const AddShopDealerApply = () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 验证报备人是否存在
|
||||||
|
if (values.userId > 0) {
|
||||||
|
const isExist = await pageShopDealerUser({userId: Number(values.userId)});
|
||||||
|
if(isExist && isExist.count == 0){
|
||||||
|
Taro.showToast({
|
||||||
|
title: '报备人不存在',
|
||||||
|
icon: 'error'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 检查客户是否已存在
|
// 检查客户是否已存在
|
||||||
const res = await pageShopDealerApply({dealerName: values.dealerName, type: 4, applyStatus: 10});
|
const res = await pageShopDealerApply({dealerName: values.dealerName, type: 4, applyStatus: 10});
|
||||||
|
|
||||||
@@ -205,7 +226,7 @@ const AddShopDealerApply = () => {
|
|||||||
type: 4,
|
type: 4,
|
||||||
realName: values.realName || user?.nickname,
|
realName: values.realName || user?.nickname,
|
||||||
mobile: values.mobile,
|
mobile: values.mobile,
|
||||||
refereeId: 33534,
|
refereeId: referee?.refereeId,
|
||||||
applyStatus: isEditMode ? 20 : 10,
|
applyStatus: isEditMode ? 20 : 10,
|
||||||
auditTime: undefined,
|
auditTime: undefined,
|
||||||
// 设置保护期过期时间(7天后)
|
// 设置保护期过期时间(7天后)
|
||||||
@@ -265,6 +286,13 @@ const AddShopDealerApply = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
reload().then(() => {
|
reload().then(() => {
|
||||||
setLoading(false)
|
setLoading(false)
|
||||||
|
}).catch((error) => {
|
||||||
|
console.error('页面加载失败:', error);
|
||||||
|
setLoading(false);
|
||||||
|
Taro.showToast({
|
||||||
|
title: '页面加载失败',
|
||||||
|
icon: 'error'
|
||||||
|
});
|
||||||
})
|
})
|
||||||
}, []); // 依赖用户ID,当用户变化时重新加载
|
}, []); // 依赖用户ID,当用户变化时重新加载
|
||||||
|
|
||||||
@@ -290,7 +318,7 @@ const AddShopDealerApply = () => {
|
|||||||
<Form.Item name="realName" label="联系人" initialValue={FormData?.realName} required>
|
<Form.Item name="realName" label="联系人" initialValue={FormData?.realName} required>
|
||||||
<Input placeholder="请输入联系人" disabled={isEditMode}/>
|
<Input placeholder="请输入联系人" disabled={isEditMode}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item name="mobile" label="联系方式" initialValue={FormData?.mobile} required>
|
<Form.Item name="mobile" label="联系方式1" initialValue={FormData?.mobile} required>
|
||||||
<Input placeholder="请输入手机号" disabled={isEditMode} maxLength={11}/>
|
<Input placeholder="请输入手机号" disabled={isEditMode} maxLength={11}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item name="address" label="公司地址" initialValue={FormData?.address} required>
|
<Form.Item name="address" label="公司地址" initialValue={FormData?.address} required>
|
||||||
@@ -299,9 +327,6 @@ const AddShopDealerApply = () => {
|
|||||||
<Form.Item name="dealerCode" label="户号" initialValue={FormData?.dealerCode} required>
|
<Form.Item name="dealerCode" label="户号" initialValue={FormData?.dealerCode} required>
|
||||||
<Input placeholder="请填写户号" disabled={isEditMode}/>
|
<Input placeholder="请填写户号" disabled={isEditMode}/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item name="comments" label="跟进情况" initialValue={FormData?.comments}>
|
|
||||||
<Input placeholder="请填写跟进情况" disabled={isEditMode}/>
|
|
||||||
</Form.Item>
|
|
||||||
{isEditMode && (
|
{isEditMode && (
|
||||||
<>
|
<>
|
||||||
<Form.Item name="money" label="签约价格" initialValue={FormData?.money} required>
|
<Form.Item name="money" label="签约价格" initialValue={FormData?.money} required>
|
||||||
@@ -338,8 +363,12 @@ const AddShopDealerApply = () => {
|
|||||||
{/*</Form.Item>*/}
|
{/*</Form.Item>*/}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<Form.Item name="userId" label="报备人" initialValue={FormData?.userId} required>
|
<Form.Item name="userId" label="报备人" initialValue={FormData?.userId}>
|
||||||
选择
|
<Input
|
||||||
|
placeholder="自己报备请留空"
|
||||||
|
disabled={isEditMode}
|
||||||
|
value={(FormData?.userId)?.toString() || ''}
|
||||||
|
/>
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
</CellGroup>
|
</CellGroup>
|
||||||
</Form>
|
</Form>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import React, {useState, useEffect, useCallback} from 'react'
|
import React, {useState, useEffect, useCallback} from 'react'
|
||||||
import {View, Text, ScrollView} from '@tarojs/components'
|
import {View, Text, ScrollView} from '@tarojs/components'
|
||||||
import {Empty, Tag, PullToRefresh, Loading} from '@nutui/nutui-react-taro'
|
import {Empty, PullToRefresh, Loading} from '@nutui/nutui-react-taro'
|
||||||
import Taro from '@tarojs/taro'
|
import Taro from '@tarojs/taro'
|
||||||
import {pageShopDealerOrder} from '@/api/shop/shopDealerOrder'
|
import {pageShopDealerOrder} from '@/api/shop/shopDealerOrder'
|
||||||
import {useDealerUser} from '@/hooks/useDealerUser'
|
import {useDealerUser} from '@/hooks/useDealerUser'
|
||||||
@@ -97,11 +97,11 @@ const DealerOrders: React.FC = () => {
|
|||||||
return '待结算'
|
return '待结算'
|
||||||
}
|
}
|
||||||
|
|
||||||
const getStatusColor = (isSettled?: number, isInvalid?: number) => {
|
// const getStatusColor = (isSettled?: number, isInvalid?: number) => {
|
||||||
if (isInvalid === 1) return 'danger'
|
// if (isInvalid === 1) return 'danger'
|
||||||
if (isSettled === 1) return 'success'
|
// if (isSettled === 1) return 'success'
|
||||||
return 'warning'
|
// return 'warning'
|
||||||
}
|
// }
|
||||||
|
|
||||||
const renderOrderItem = (order: OrderWithDetails) => (
|
const renderOrderItem = (order: OrderWithDetails) => (
|
||||||
<View key={order.id} className="bg-white rounded-lg p-4 mb-3 shadow-sm">
|
<View key={order.id} className="bg-white rounded-lg p-4 mb-3 shadow-sm">
|
||||||
@@ -109,28 +109,35 @@ const DealerOrders: React.FC = () => {
|
|||||||
<Text className="font-semibold text-gray-800">
|
<Text className="font-semibold text-gray-800">
|
||||||
电费收益
|
电费收益
|
||||||
</Text>
|
</Text>
|
||||||
<Tag type={getStatusColor(order.isSettled, order.isInvalid)}>
|
|
||||||
{getStatusText(order.isSettled, order.isInvalid)}
|
|
||||||
</Tag>
|
|
||||||
</View>
|
|
||||||
|
|
||||||
<View className="flex justify-between items-center mb-1">
|
|
||||||
<Text className="text-sm text-gray-400">
|
|
||||||
结算金额:¥{order.orderPrice || '0.00'}
|
|
||||||
</Text>
|
|
||||||
<Text className="text-lg text-orange-500 font-semibold">
|
<Text className="text-lg text-orange-500 font-semibold">
|
||||||
¥{(Number(order.orderPrice) * 10).toFixed(2)}
|
¥{(Number(order.orderPrice) * 10).toFixed(2)}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
|
<View className="flex justify-between items-center mb-1">
|
||||||
|
<Text className="text-sm text-gray-400">
|
||||||
|
客户名称:{order.comments}
|
||||||
|
</Text>
|
||||||
|
<Text className="text-sm text-gray-400">
|
||||||
|
收益比率:{order.rate}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
<View className="flex justify-between items-center">
|
<View className="flex justify-between items-center">
|
||||||
<Text className="text-sm text-gray-400">
|
<Text className="text-sm text-gray-400">
|
||||||
客户:{order.comments}
|
结算电量:{order.orderPrice || '0.00'}
|
||||||
</Text>
|
</Text>
|
||||||
|
<Text className="text-sm text-gray-400">
|
||||||
|
状态:{getStatusText(order.isSettled, order.isInvalid)}
|
||||||
|
</Text>
|
||||||
|
</View>
|
||||||
|
|
||||||
|
<View className="flex justify-between items-center mb-1">
|
||||||
<Text className="text-sm text-gray-400">
|
<Text className="text-sm text-gray-400">
|
||||||
{order.settleTime}
|
{order.settleTime}
|
||||||
</Text>
|
</Text>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
</View>
|
</View>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user