fix(dealer): 更新角色ID及重新登录逻辑

- 将用户角色ID从1848更新为1935
- 注册后延时1.5秒等待权限同步,无额外空行

feat(customer): 新增小区选择功能

- 添加小区选择状态管理及弹出层组件
- 实现小区列表加载与搜索过滤
- 支持小区的选择与清除操作,更新表单地址字段
- 表单回填时设置小区选中状态
- 用自定义Cell替代地址输入框,增加交互体验

fix(index): 修改邀请好友页面路径

- 将邀请好友页面路径由/dealer/qrcode/index更改为/dealer/team/index

fix(qrcode): 更新伙伴计划名称

- 将“南南佐顿门窗伙伴计划”修改为“桂乐淘伙伴计划”

fix(team): 隐藏手机号显示并简化成员信息

- 将手机号显示组件隐藏
- 移除显示UID的文本,仅保留加入时间显示
This commit is contained in:
2026-04-16 15:14:36 +08:00
parent 815678a1de
commit 8128e2ffb2
5 changed files with 163 additions and 17 deletions

View File

@@ -207,7 +207,7 @@ const AddUserAddress = () => {
if (roles.length > 0) { if (roles.length > 0) {
await updateUserRole({ await updateUserRole({
...roles[0], ...roles[0],
roleId: 1848 roleId: 1935
}) })
} }
@@ -233,7 +233,7 @@ const AddUserAddress = () => {
// 注册成功后等待1.5秒,让权限同步生效 // 注册成功后等待1.5秒,让权限同步生效
await new Promise(resolve => setTimeout(resolve, 1500)); await new Promise(resolve => setTimeout(resolve, 1500));
// 重新登录刷新用户状态(包括最新权限) // 重新登录刷新用户状态(包括最新权限)
Taro.removeStorageSync('Token'); Taro.removeStorageSync('Token');
Taro.removeStorageSync('UserId'); Taro.removeStorageSync('UserId');

View File

@@ -16,6 +16,8 @@ import {
} from "@/utils/dateUtils"; } from "@/utils/dateUtils";
import {ShopDealerUser} from "@/api/shop/shopDealerUser/model"; import {ShopDealerUser} from "@/api/shop/shopDealerUser/model";
import {getShopDealerUser, pageShopDealerUser} from "@/api/shop/shopDealerUser"; import {getShopDealerUser, pageShopDealerUser} from "@/api/shop/shopDealerUser";
import {listDictData} from "@/api/system/dict-data";
import type {DictData} from "@/api/system/dict-data/model";
const AddShopDealerApply = () => { const AddShopDealerApply = () => {
const {params} = useRouter(); const {params} = useRouter();
@@ -69,6 +71,13 @@ const AddShopDealerApply = () => {
const [receptionistLoading, setReceptionistLoading] = useState<boolean>(false) const [receptionistLoading, setReceptionistLoading] = useState<boolean>(false)
const [selectedReceptionist, setSelectedReceptionist] = useState<ShopDealerUser | null>(null) const [selectedReceptionist, setSelectedReceptionist] = useState<ShopDealerUser | null>(null)
// 小区选择状态
const [showCommunityPicker, setShowCommunityPicker] = useState<boolean>(false)
const [communitySearch, setCommunitySearch] = useState<string>('')
const [communityList, setCommunityList] = useState<DictData[]>([])
const [communityLoading, setCommunityLoading] = useState<boolean>(false)
const [selectedCommunity, setSelectedCommunity] = useState<DictData | null>(null)
// 获取审核状态文字 // 获取审核状态文字
const getApplyStatusText = (status?: number) => { const getApplyStatusText = (status?: number) => {
switch (status) { switch (status) {
@@ -196,6 +205,62 @@ const AddShopDealerApply = () => {
setSelectedReceptionist(null) setSelectedReceptionist(null)
} }
// 加载小区列表
const loadCommunityList = async (keyword?: string) => {
setCommunityLoading(true)
try {
const list = await listDictData({ dictCode: 'xiaoqu' })
// 过滤搜索关键词
if (keyword) {
setCommunityList(list.filter((item: DictData) =>
(item.dictDataName || '').includes(keyword) ||
(item.label || '').includes(keyword)
))
} else {
setCommunityList(list)
}
} catch (e) {
console.error('加载小区列表失败:', e)
} finally {
setCommunityLoading(false)
}
}
// 打开小区选择
const openCommunityPicker = () => {
setCommunitySearch('')
loadCommunityList()
setShowCommunityPicker(true)
}
// 搜索小区
const handleCommunitySearch = (val: string) => {
setCommunitySearch(val)
loadCommunityList(val)
}
// 选择小区
const handleSelectCommunity = (item: DictData) => {
setSelectedCommunity(item)
setShowCommunityPicker(false)
// 更新表单数据
if (formRef.current) {
formRef.current.setFieldsValue({
address: item.dictDataName || item.label || ''
})
}
}
// 清除小区
const handleClearCommunity = () => {
setSelectedCommunity(null)
if (formRef.current) {
formRef.current.setFieldsValue({
address: ''
})
}
}
// 提交表单 // 提交表单
// 计算保护期过期时间15天后 // 计算保护期过期时间15天后
const calculateExpirationTime = (): string => { const calculateExpirationTime = (): string => {
@@ -578,14 +643,22 @@ const AddShopDealerApply = () => {
useEffect(() => { useEffect(() => {
if (!formRef.current || !FormData) return; if (!formRef.current || !FormData) return;
const parsed = parseHouseKey(FormData.dealerCode); const parsed = parseHouseKey(FormData.dealerCode);
const communityValue = parsed.community || FormData.address || '';
formRef.current.setFieldsValue({ formRef.current.setFieldsValue({
address: parsed.community || FormData.address, address: communityValue,
buildingNo: parsed.buildingNo, buildingNo: parsed.buildingNo,
unitNo: parsed.unitNo, unitNo: parsed.unitNo,
roomNo: parsed.roomNo, roomNo: parsed.roomNo,
realName: FormData.realName, realName: FormData.realName,
mobile: FormData.mobile mobile: FormData.mobile
}); });
// 回填小区选中状态
if (communityValue) {
setSelectedCommunity({
dictDataName: communityValue,
label: communityValue
} as DictData)
}
}, [FormData]); }, [FormData]);
if (loading) { if (loading) {
@@ -604,9 +677,34 @@ const AddShopDealerApply = () => {
> >
<View className={'bg-gray-100 h-3'}></View> <View className={'bg-gray-100 h-3'}></View>
<CellGroup style={{padding: '4px 0'}}> <CellGroup style={{padding: '4px 0'}}>
<Form.Item name="address" label="小区" initialValue={FormData?.address} required> <Cell
<Input placeholder="幸福里" disabled={isEditMode}/> title="小区"
</Form.Item> required
extra={
<View className="flex items-center">
{selectedCommunity ? (
<View className="flex items-center">
<Text className="text-sm text-gray-800 mr-2">
{selectedCommunity.dictDataName || selectedCommunity.label}
</Text>
{!isEditMode && (
<View
onClick={(e) => { e.stopPropagation(); handleClearCommunity(); }}
className="flex items-center px-1"
>
<Del size={14} color="#999"/>
</View>
)}
</View>
) : (
<Text className="text-sm text-gray-400"></Text>
)}
<ArrowRight size={14} color="#ccc"/>
</View>
}
onClick={isEditMode ? undefined : openCommunityPicker}
/>
<Form.Item name="address" initialValue={FormData?.address} style={{display: 'none'}}/> {/* 隐藏字段,用于表单提交 */}
<Form.Item name="buildingNo" label="楼栋号" required> <Form.Item name="buildingNo" label="楼栋号" required>
<Input placeholder="3" disabled={isEditMode}/> <Input placeholder="3" disabled={isEditMode}/>
</Form.Item> </Form.Item>
@@ -762,6 +860,59 @@ const AddShopDealerApply = () => {
</View> </View>
</Popup> </Popup>
{/* 小区选择弹出层 */}
<Popup
visible={showCommunityPicker}
position="bottom"
round
onClose={() => setShowCommunityPicker(false)}
style={{height: '70%'}}
>
<View className="flex flex-col h-full">
{/* 标题栏 */}
<View className="flex items-center justify-between px-4 py-3 border-b border-gray-100">
<Text className="text-base font-semibold text-gray-800"></Text>
<View onClick={() => setShowCommunityPicker(false)}>
<Text className="text-sm text-blue-500"></Text>
</View>
</View>
{/* 搜索框 */}
<View className="px-3 py-2">
<SearchBar
value={communitySearch}
placeholder="搜索小区名称"
onChange={handleCommunitySearch}
/>
</View>
{/* 列表 */}
<View className="flex-1 overflow-y-auto">
{communityLoading ? (
<View className="flex justify-center items-center py-8">
<Loading></Loading>
</View>
) : communityList.length === 0 ? (
<View className="flex justify-center items-center py-8">
<Text className="text-sm text-gray-400"></Text>
</View>
) : (
communityList.map((item, index) => (
<Cell
key={item.dictDataId || index}
title={item.dictDataName || item.label || ''}
description={item.comments || ''}
extra={
selectedCommunity?.dictDataId === item.dictDataId ? (
<Text className="text-sm text-blue-500"></Text>
) : null
}
onClick={() => handleSelectCommunity(item)}
/>
))
)}
</View>
</View>
</Popup>
{/* 审核状态显示(仅在编辑模式下显示) */} {/* 审核状态显示(仅在编辑模式下显示) */}
{isEditMode && ( {isEditMode && (
<CellGroup> <CellGroup>

View File

@@ -385,7 +385,7 @@ const DealerQrcode: React.FC = () => {
)} )}
<View className="text-lg font-semibold text-gray-800 mb-2"> <View className="text-lg font-semibold text-gray-800 mb-2">
</View> </View>
<View className="text-sm text-gray-500 mb-4"> <View className="text-sm text-gray-500 mb-4">
| | | |

View File

@@ -325,7 +325,7 @@ const DealerTeam: React.FC = () => {
</View> </View>
{/* 显示手机号(仅本级可见) */} {/* 显示手机号(仅本级可见) */}
{showPhone && member.phone && ( {showPhone && member.phone && (
<Text className="text-sm text-gray-500" onClick={(e) => { <Text className="text-sm text-gray-500 hidden" onClick={(e) => {
e.stopPropagation(); e.stopPropagation();
makePhoneCall(member.phone || ''); makePhoneCall(member.phone || '');
}}> }}>
@@ -334,14 +334,9 @@ const DealerTeam: React.FC = () => {
</Text> </Text>
)} )}
</View> </View>
<Space> <Text className="text-xs text-gray-500">
<Text> {member.joinTime}
<Text className="text-xs text-gray-500">UID{member.userId}</Text> </Text>
</Text>
<Text className="text-xs text-gray-500">
{member.joinTime}
</Text>
</Space>
</View> </View>
</View> </View>

View File

@@ -28,7 +28,7 @@ const menuList: MenuItem[] = [
id: 3, id: 3,
title: '邀请好友', title: '邀请好友',
icon: 'https://oss.wsdns.cn/20260330/64cac0d5cbe645af8a574a257cd00302.png?x-oss-process=image/resize,m_fixed,w_750/quality,Q_90', icon: 'https://oss.wsdns.cn/20260330/64cac0d5cbe645af8a574a257cd00302.png?x-oss-process=image/resize,m_fixed,w_750/quality,Q_90',
path: '/dealer/qrcode/index' path: '/dealer/team/index'
}, },
{ {
id: 4, id: 4,